携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
一、创建JsonNode对象
开始构建节点
JsonNode node = mapper.createObjectNode();
也可以通过JsonNodeFactory创建一个节点:
JsonNode node = JsonNodeFactory.instance.objectNode();
转JsonNode
String json = "{\"username\":\"tom\",\"company\":{\"companyName\":\"中华\",\"address\":\"北京\"},\"cars\":[\"奔驰\",\"宝马\"]"};
String arrayJson = "[{\"number\":64,\"result\":\"SUCCESS\"},{\"number\":65,\"result\":\"FAILURE\"},{\"number\":66,\"result\":\"ABORTED\"},{\"number\":67,\"result\":\"SUCCESS\"}]";
ObjectMapper mapper = new ObjectMapper();
//json转JsonNode
JsonNode jsonNode = mapper.readTree(json);
String sex = jsonNode.get("username").asText();
//JsonNode转ObjectNode
ObjectNode objectNode = (ObjectNode)jsonNode;
//JsonNode转ObjectNode
ArrayNode arrayNode = (ArrayNode)jsonNodeList;
二、jsonNode的fieldNames方法是获取jsonNode的所有的key值
Iterator<String> keys = jsonNode.fieldNames();
while(keys.hasNext()){
String key = keys.next();
System.out.println("key键是:"+key);
}
三、根据key值获取对应的值
JsonNode path = jsonNode.path("username");
JsonNode resultValue = jsonNode.findValue("username");
JsonNode resultPath = jsonNode.findPath("username");
value为String,可以这样读取jsonNode的asText()方法获取到字符串; value为int类型,可以jsonNode.findValue("number").asInt(); 这几种方法都可以根据key获取到相应的值,匹配到一个就停止搜索。
resultValue和resultPath的区别在于,如果没有匹配到任何key值为性别,resultValue为null,resultPath为空JsonNode,第一种的区别不是很清楚。
四、JsonNode数组
如果是一个JsonNode数组,使用jsonNode.elements();读取数组中每个node, 如果不是JsonNode数组,使用jsonNode.elements();返回jsonNode的values
Iterator<JsonNode> elements = jsonNode.elements();
while(elements.hasNext()){
JsonNode node = elements.next();
System.out.println(node.toString());
}
五、取出所有key值为number的JsonNode的List
List<JsonNode> findKeys = jsonNode.findParents("number");
for (JsonNode result:findKeys){
System.err.println(result.toString());
}
List<JsonNode> findValues = jsonNode.findValues("number");
for(JsonNode value: findValues){
System.out.println( value.toString());
}
六、JsonNode遍历
某个JsonNode的key和value(value可能是字符串也可能是子jsonNode,但如果value是jsonNode数组的话,是无法读取的)
Iterator<Map.Entry<String,JsonNode>> jsonNodes = jsonNode.fields();
while (jsonNodes.hasNext()) {
Map.Entry<String, JsonNode> node = jsonNodes.next();
System.err.println("遍历获取key:"+node.getKey());
System.err.println("遍历获取值:"+node.getValue().toString());
}
Java8的foreach:
jsonNode.forEach((JsonNode node)->{
System.out.println("结果:"+node.toString());
});