前言

最近风闻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()区别

  1. 如果 字段本身的值为 text 类型 的, 那么用 asText() 和 textValue() 获取的结果是一致的;
  2. 如果 字段本身的值不是 text 类型的, 比如上面的 age 应该是数字类型的, 那么 asText() 会将最后的结果 16 转换为text 然后返回, 而 textValue() 则取不到值会返回空null, 此时需要用 intValue() /longValue()/数值类型的取值方法才能取到值;
  3. 同理 如果字段本身不是 int 整数型, 那么asInt() 会将获取的结果尝试转化为 int 然后返回, 而 intValue() 会返回空null;

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

mysql保留关键字参考指南 上一篇
TortoiseGit正确使用ssh指南 下一篇