jackson库是一款json解析的java库,其api比较多,而且容易混淆,今天我们就来看一下asText和textValue的区别。

假设有一个json数据:

{"a": 1,"b": {"b_1": "b1","b_2": "b2"},"c": "2"
}

写一段代码对上面的json数据进行测试:

private static void test2() throws JsonMappingException, JsonProcessingException {JsonNode readTree = mapper.readTree(json);System.out.println("-----get a(int)-----");JsonNode jsonNodea = readTree.get("a");System.out.println("asInt:"+jsonNodea.asInt());System.out.println("intValue:"+jsonNodea.intValue());System.out.println("asText:"+jsonNodea.asText());System.out.println("textValue:"+jsonNodea.textValue());System.out.println("toPrettyString:"+jsonNodea.toPrettyString());System.out.println("-----get c(string)-----");JsonNode jsonNodec = readTree.get("c");System.out.println("asText:"+jsonNodec.asText());System.out.println("textValue:"+jsonNodec.textValue());System.out.println("asInt:"+jsonNodec.asInt());System.out.println("intValue:"+jsonNodec.intValue());System.out.println("toPrettyString:"+jsonNodec.toPrettyString());System.out.println("-----get b(object)-----");JsonNode jsonNodeb = readTree.get("b");System.out.println("asText:"+jsonNodeb.asText());System.out.println("textValue:"+jsonNodeb.textValue());System.out.println("asInt:"+jsonNodeb.asInt());System.out.println("intValue:"+jsonNodeb.intValue());System.out.println("toPrettyString:"+jsonNodeb.toPrettyString());System.out.println("-----get d(not node)-----");JsonNode jsonNoded = readTree.get("d");System.out.println(jsonNoded.toPrettyString());
}

输出:

-----get a(int)-----
asInt:1
intValue:1
asText:1
textValue:null
toPrettyString:1
-----get c(string)-----
asText:2
textValue:2
asInt:2
intValue:0
toPrettyString:"2"
-----get b(object)-----
asText:
textValue:null
asInt:0
intValue:0
toPrettyString:{"b_1" : "b1","b_2" : "b2"
}
-----get d-----
Exception in thread "main" java.lang.NullPointerExceptionat com.iqiyi.toutiao.Test.JacksonTest.test2(JacksonTest.java:98)at com.iqiyi.toutiao.Test.JacksonTest.main(JacksonTest.java:102)

结论:

1、jackson通过get("字段名")api方法获取JsonNode对象时,如果该字段不存在,返回null;

2、如果json数据的某个字段值是基本类型(非object、array),可以使用jackson提供的asText、textValue,asInt、intValue...等方法来获取字段的值;如果字段值是复杂类型,那么上述方法将失效,可以使用toString()、toPrettyString()方法打印值。

3、对于字段值是基本类型的数据,如果是String类型,用 asText() 和 textValue() 获取的结果是一致的;同理,如果是int类型,用asInt()、intValue()获取的结果也是一致的;

4、asText()和textValue()方法都是获取字段是String基本类型的数据,区别是:

  • asText()会进行强转,如果字段值不是string基本类型数据,会将其转成String基本类型的数据;(如果是复杂类型,返回空字符串)
  • textValue()只针对String基本类型数据,所以如果字段值是非String基本类型数据,则返回null;

同理,asInt()和intValue()方法也是一样的:

  • asInt()会进行强转,比如字符串类型的数字转成数字,如果强转失败(比如字符串abc),返回0;(如果是复杂类型,返回0)
  • intValue()只针对int节本类型数据,对于非int基本类型数据,intValue返回0;

Jackson中JsonNode的取值asText()和textValue()区别相关推荐

  1. vue 取数组第一个值_vue遍历对象中的数组取值示例

    前几天小项目,没考虑周全,让后端改接口,改成数组中包含对象中包含数组的形式,后来越琢磨越不对,后台把所有数据放在了一个对象里,我拿弹窗数据不好拿,索性又改了回来,把后端折腾够呛,自己也折腾够呛,发上来 ...

  2. datetime 比较_Python 字典中key命中取值的两种方法性能比较!

    起步 从字典中取值有两个方法,一个是先判断key是否在字典中再取值:另一个是包裹try块中直接去取值: Python资源共享群:484031800 def use_in(d, key):if key ...

  3. python在json文件中查找指定数据_Python中json的取值 如何使用python提取json中指定字段的数据...

    python中为什么用json有什么作用 如何用python读取json里面的值啊我爱你,所以我给了你伤害我的权力,只要我能忍受,我会一直陪伴着你,但你不能伤害我太多. 数据如下,我想要读取name. ...

  4. Java|Java中int的取值范围是多少

    Java 中 int 的取值范围是:-2^31 ~ 2^31-1 大致想一下,int 占 4字节,也就是 32 位,int 是有符号的,最高位为符号位.所以剩下31个位置. 那么我们大胆猜测一下,最大 ...

  5. Java中int的取值范围

    先上代码,通过下面代码的执行结果观察 public class Test {public static void main(String[] args) {// 2的31次方int j = (int) ...

  6. python浮点数的范围和精度_python基础教程之C#教程之C#中float的取值范围和精度分析...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文实例分析了C#中float的取值范围和精度.分享给大家供大家参考.具体分析如下: float类型的表现 ...

  7. java int值的范围_java中int的取值范围是多少

    java中int的取值范围是多少 发布时间:2020-06-26 14:53:13 来源:亿速云 阅读:159 作者:Leah 今天就跟大家聊聊有关java中int的取值范围,可能很多人都不太了解,为 ...

  8. python中int数据范围_Python中int的取值范围是多少

    Python中int的取值范围是多少 发布时间:2020-10-30 09:33:50 来源:亿速云 阅读:66 作者:小新 这篇文章将为大家详细讲解有关Python中int的取值范围是多少,小编觉得 ...

  9. Struts2中EL表达式取值

    http://blog.csdn.net/cuihaiyang/article/details/41950141 (写的不错,可以知道为什么struts2可以用El取属性值的问题.正常el从reque ...

最新文章

  1. 奥比中光Orbbec Astra Pro体感摄像头“标定全过程”
  2. python使用字典格式化字符串-Python字符串格式方式 %s format()
  3. [置顶]       强大的jquery选择器
  4. (转)IOS学习笔记-2015-03-29 int、long、long long取值范围
  5. Asp.Net Mvc3.0(MEF依赖注入实例)
  6. Django(part35)--多对多映射
  7. 在linux安装不了apache,Apache 不能安装在linux?
  8. php在类定义一个我静态变量,php中静态类与静态变量用法的区别分析_PHP教程
  9. 工作记录二-Docker+Dockerfile
  10. AWD-LSTM为什么这么棒? 1
  11. 蓝色起源成功完成“新谢泼德号”飞船第17次发射
  12. 华为鸿蒙系统手机央视,央视再次确认!华为投入巨资打造鸿蒙系统生态:体验媲美七成安卓...
  13. (转)什么时候加上android.intent.category.DEFAULT和LAUNCHER
  14. Java中队列的使用
  15. Redis的安装教程(Windows+Linux)【超详细】
  16. 时间序列分析:使用Pandas探索能源数据集
  17. 【音乐拼接】mp3格式
  18. 最新谷歌本地搜索api
  19. H5页面打开微信小程序
  20. 一起了解Windows——用Win10自带工具录制视频

热门文章

  1. python微信公众号爬虫_微信公众号推送信息爬取---python爬虫
  2. 重磅!腾讯5G探索地图揭秘
  3. 0623-6.2.0-如何在CDH中安装CFM
  4. Windows10环境下Python 开发环境搭建
  5. fortify java_Fortify SCA快速入门以及常见问题解决方法
  6. springboot新建webapp
  7. 微信企业号开发(3)
  8. 对话微软小娜负责人:如何撬动移动生态系统?
  9. 用户画像标签数据开发之组合标签计算
  10. 职高计算机应用基础课程标准,高职计算机应用基础课程标准研究