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 

  • 相关阅读:
    SharePoint网站迁移问题
    使用.NET框架自带的Json序列化类
    IL:Hello World
    Javascript面向对象
    抽象代数学习记录
    关于集成测试
    用QTP脚本操作腾讯QQ好友买卖功能
    关于白盒测试一些资料
    Developer小记
    架构设计
  • 原文地址:https://www.cnblogs.com/applerosa/p/11510117.html
Copyright © 2011-2022 走看看