Jackson JsonNode
类,完整路径为com.fasterxml.jackson.databind.JsonNode
,是Jackson的json树模型(对象图模型)。Jackson能读 JSON 至 JsonNode 实例,写 JsonNode 到 JSON。
操作示例
public static void main(String[] args) throws IOException {
String json = "{ \"name\" : \"汉字\", \"age\" : 28, \"height\": 1.75, \"ok\": true}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(json);
System.out.println("class: " + jsonNode.getClass());
System.out.println("\njsonNode.getNodeType(): " + jsonNode.getNodeType());
Iterator<String> names = jsonNode.fieldNames();
System.out.println("\njsonNode.fieldNames() type: " + names);
System.out.print("\njsonNode.fieldNames().foreach: [");
while (names.hasNext()) {
System.out.print(names.next() + ", ");
}
System.out.println("]");
Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();
System.out.println("\njsonNode.fields(): " + fields);
System.out.print("\njsonNode.fields().foreach: {");
while (fields.hasNext()) {
Map.Entry<String, JsonNode> entry = fields.next();
JsonNode node = entry.getValue();
System.out.print(entry.getKey() +": "+ node.asText() + ", ");
}
System.out.println("}");
}
结果
class: class com.fasterxml.jackson.databind.node.ObjectNode
jsonNode.getNodeType(): OBJECT
jsonNode.fieldNames() type: java.util.LinkedHashMap$LinkedKeyIterator@1a04f701
jsonNode.fieldNames().foreach: [name, age, height, ok, ]
jsonNode.fields(): java.util.LinkedHashMap$LinkedEntryIterator@159f197
jsonNode.fields().foreach: {name: 汉字, age: 28, height: 1.75, ok: true, }
结果的第一条可知 JsonNode
真实的实现类是 ObjectNode
类型判断
JsonNode 包含一系列可以判断类型的方法
image.png
ObjectNode
继承关系: ObjectNode
<- ContainerNode<ObjectNode>
<- BaseJsonNode
<- JsonNode
JsonNode 是一个只读抽象类,不能直接构建 JsonNode 实例的对象图,需要创建 JsonNode 的子类ObjectNode
实例的对象图。作为 JsonNode 的子类,ObjectNode 可以在任何使用了JsonNode之处使用。
网友评论