zoukankan      html  css  js  c++  java
  • 关于Jackson中JsonNode的取值asText()和textValue()区别

    在 比较高版本的Jackson 中, 包名为 com.fasterxml.jackson 

     1 String jsonText="{"name":"张三","age":16,"other":"312312.22"}"
     2 // JsonTools.text2Node() 为自己工具类请无视
     3 JsonNode node = JsonTools.text2Node(jsonText);
     4 // 一般我们需要从node中取值
     5 node.get("name");
     6 node.get("name").asText();
     7 node.get("name").asText("默认值");
     8 node.get("name").textValue();
     9 
    10 // 结果依次是
    11 // "张三"
    12 // 张三
    13 // 张三
    14 // 张三
    15 
    16 node.get("age").asText();      // 结果为: 16
    17 node.get("age").textValue();   // 结果为: null
    18 
    19 // 关于asText()和textValue()的区别

    上面很清楚的可以看到:

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

        

      4. 关于其他类型的获取值,同理: 如 longValue() 和 asLong() , asDouble() 和doubleValue();

    需要补充一点, 如果字段在node中不存在, 则会报错空指针, 因为 他会是先获取,然后将结果转换为text 但是 在前面一步 get("")的结果已经为空;

    差异在于, 没有值的 字段, 起码key 是有的,此时会处理value 

  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/applerosa/p/11510117.html
Copyright © 2011-2022 走看看