关于 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 数据。