Jackson jsonTree

Jackson 内置树模型,可用于表示JSON对象,如果不知道接收到的JSON格式,或者不能通过一个类来表示它,那么就要用到Jackson的树模型。如果需要在使用或转化JSON之前对齐进行操作,也需要用到Jackson树模型。

String userString = "{\"name\":\"张三\",\"age\":20}";
JsonNode product = mapper.readValue(userString, JsonNode.class);

只需将JsonNode.class作为第二个参数传递给readValue()方法,就可以将JSON字符串解析为JsonNode对象。

ObjectMapper提供了readTree()方法,该方法返回JsonNode。

String userString = "{\"name\":\"张三\",\"age\":20}";
JsonNode product = mapper.readTree(userString);

通过JsonNode类,可以非常灵活和动态的方式将JSON作为Java对象导航。

String productString  = "{\"id\":\"957c43f2-fa2e-42f9-bf75-6e3d5bb6960a\",\"name\":\"手机\",\"brandName\":\"华为\",\"ownerName\":\"华为技术有限公司\"}";
JsonNode product = mapper.readTree(productString);
String name = product.get("name").asText();
System.out.println("name = " + name);

Java对象转JsonNode

Product product = new Product("1", "iPhone 12", "Apple", "Tim Cook");
JsonNode jsonNode = mapper.valueToTree(product);

获取JsonNode字段

{"name": "张三", "age": 20}
JsonNode name = jsonNode.get("name");
JsonNode age = jsonNode.get("age")

即使两个字段都是String字段,get方法也始终返回JsonNode来表示该字段。

在路径中获取JsonNode字段

JsonNode有一个at的特殊方法,可以从JSON图中以给定的JsonNode为根的任何位置访问JSON字段。

{"user": { "name": "张三", "age": 20 }}

如果要将JSON解析为JsonNode,则可可以使用at方法访问名称字段

String jsonString ="{\"user\": { \"name\": \"张三\", \"age\": 20 }}";
JsonNode jsonNode = mapper.readTree(jsonString);
JsonNode at = jsonNode.at("/user/name");
System.out.println(at); // 张三

转换JsonNode字段

String f2Str = jsonNode.get("f2").asText();
double f2Dbl = jsonNode.get("f2").asDouble();
int    f2Int = jsonNode.get("f2").asInt();
long   f2Lng = jsonNode.get("f2").asLong();

最后更新于

这有帮助吗?