Json数据处理

174 阅读2分钟

关于 Json

数据准备

String testJson = "{\n" +
        "\t"address": [],\n" +
        "\t"column": [\n" +
        "\t\t"audit_table_name",\n" +
        "\t\t"audit_date"\n" +
        "\t],\n" +
        "\t"hadoopConfig": {\n" +
        "\t\t"dfs.nameservices": "nameservice1",\n" +
        "\t\t"dfs.ha.namenodes.nameservice1": "cnbjsjztpnn01,cnbjsjztpnn02",\n" +
        "\t\t"dfs.namenode.rpc-address.nameservice1.cnbjsjztpnn01": "cnbjsjztpnn01:8020",\n" +
        "\t\t"dfs.namenode.rpc-address.nameservice1.cnbjsjztpnn02": "cnbjsjztpnn02:8020",\n" +
        "\t\t"dfs.client.failover.proxy.provider.nameservice1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"\n" +
        "\t},\n" +
        "\t"connection": [{\n" +
        "\t\t"jdbcUrl": [\n" +
        "\t\t\t"jdbc:mysql://10.11.14.10:3306/carbon"\n" +
        "\t\t],\n" +
        "\t\t"table": [\n" +
        "\t\t\t"audit_result"\n" +
        "\t\t]\n" +
        "\t}],\n" +
        "\t"username": "root"\n" +
        "}";

如下:

{
	"address": [],
	"column": [
		"audit_table_name",
		"audit_date"
	],
	"hadoopConfig": {
		"dfs.nameservices": "nameservice1",
		"dfs.ha.namenodes.nameservice1": "cnbjsjztpnn01,cnbjsjztpnn02",
		"dfs.namenode.rpc-address.nameservice1.cnbjsjztpnn01": "cnbjsjztpnn01:8020",
		"dfs.namenode.rpc-address.nameservice1.cnbjsjztpnn02": "cnbjsjztpnn02:8020",
		"dfs.client.failover.proxy.provider.nameservice1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
	},
	"connection": [{
		"jdbcUrl": [
			"jdbc:mysql://10.11.14.10:3306/carbon"
		],
		"table": [
			"audit_result"
		]
	}],
	"username": "root"
}

替换值

// com.fasterxml.jackson.databind
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = null;
try {
    jsonNode = objectMapper.readTree(testJson);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

// 获取 connection 数组节点
ArrayNode connectionNode = (ArrayNode) jsonNode.get("connection");

// 获取 connection 数组中的第一个元素
ObjectNode connectionElementNode = (ObjectNode) connectionNode.get(0);

// 获取 table 数组节点
ArrayNode tableNode = (ArrayNode) connectionElementNode.get("table");

// 将 table 数组中的值替换为 "zjl"
tableNode.removeAll();
tableNode.add("zjl");

// 将修改后的 JSON 输出
String modifiedJsonStr = null;
try {
    //modifiedJsonStr = objectMapper.writeValueAsString(jsonNode);
    modifiedJsonStr = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}
System.out.println(modifiedJsonStr);

在上述示例代码中,我们使用 Jackson 库解析 JSON 字符串,并找到需要替换的 "table" 数组节点。然后,我们将数组中的值清除,并添加新的值 "zjl"。最后,我们使用 Jackson 库将修改后的 JSON 转换回字符串,并输出结果。

Jackson 库

用于处理 JSON 格式的 Java 库,提供了多个常用的类和方法来进行 JSON 的序列化和反序列化。

标题概述具体其它
ObjectMapper 类Jackson 库的主要类,用于进行 JSON 的序列化和反序列化操作。它提供了许多方法来处理 JSON 数据readValue() 将 JSON 字符串转换为 Java 对象,writeValueAsString() 将 Java 对象转换为 JSON 字符串。
JsonNode 接口Jackson 库中的节点接口,用于表示 JSON 树的节点。它有多个实现类。如 ObjectNode 表示 JSON 对象节点,ArrayNode 表示 JSON 数组节点,ValueNode 表示 JSON 值节点。JsonNode 可以通过 ObjectMapper 的 readTree() 方法从 JSON 字符串创建,也可以通过方法链式调用进行操作。
JsonParser 类用于解析 JSON 的类,它提供了许多方法来逐个读取 JSON 数据的各个部分如 nextToken() 用于获取下一个 JSON 令牌,getText() 用于获取当前令牌的文本内容。
JsonGenerator 类用于生成 JSON 的类,它提供了许多方法来生成不同类型的 JSON 数据如 writeStartObject() 用于开始一个 JSON 对象,writeFieldName() 用于写入字段名,writeString() 用于写入字符串值
JsonInclude 注解JsonInclude 是一个注解,用于控制在序列化过程中如何处理属性值为 null 或默认值的字段。通过在类或字段上使用 @JsonInclude 注解,可以设置不同的序列化规则,如 Include.NON_NULL 表示仅包含非 null 值的字段。

这只是 Jackson 库中一些常用的类和方法的示例,它提供了更多功能和选项来满足不同的 JSON 处理需求。你可以根据具体的使用场景,深入了解 Jackson 库的其他类和方法,以更好地处理 JSON 数据。