前言
最近风闻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;
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!