前言
最近风闻 FastJSON 各种安全漏洞,果断更换以性能和灵活性著称的 Jackson。
正文
- Java 对象转 JsonNode 对象(3 种方法)
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(object);
JsonNode jsonNode = mapper.readTree(json);
JsonNode node = objectMapper.valueToTree(map);
JsonNode node = mapper.convertValue(object, JsonNode.class);
- 遍历 JsonNode
JsonNode jsonNode = objectMapper.readTree(json);
for (JsonNode node : jsonNode) {
log.info(node.toString());
}
- 判断 JsonNode 是否数组
JsonNode jsonNode = objectMapper.readTree(json);
boolean bool = jsonNode.isArray();
- JsonNode 转 ArrayNode
ArrayNode arrayNode = jsonNode.deepCopy();
- JsonNode 更新值
// 先转ObjectNode,再设置
ObjectNode objectNode = jsonNode.deepCopy();
objectNode.put("a", "b");
jsonNode = objectNode;
- ObjectMapper 将 json 字符串转换为泛型 List
JavaType javaType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, YourBean.class);
List<YourBean> list = objectMapper.readValue(json, javaType);
- asText()和 textValue()区别
- 如果 字段本身的值为 text 类型 的, 那么用 asText() 和 textValue() 获取的结果是一致的;
- 如果 字段本身的值不是 text 类型的, 比如上面的 age 应该是数字类型的, 那么 asText() 会将最后的结果 16 转换为 text 然后返回, 而 textValue() 则取不到值会返回空 null, 此时需要用 intValue() /longValue()/数值类型的取值方法才能取到值;
- 同理 如果字段本身不是 int 整数型, 那么 asInt() 会将获取的结果尝试转化为 int 然后返回, 而 intValue() 会返回空 null;
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于