Jackson中JsonNode的取值asText()和textValue()区别
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()区别相关推荐
- vue 取数组第一个值_vue遍历对象中的数组取值示例
前几天小项目,没考虑周全,让后端改接口,改成数组中包含对象中包含数组的形式,后来越琢磨越不对,后台把所有数据放在了一个对象里,我拿弹窗数据不好拿,索性又改了回来,把后端折腾够呛,自己也折腾够呛,发上来 ...
- datetime 比较_Python 字典中key命中取值的两种方法性能比较!
起步 从字典中取值有两个方法,一个是先判断key是否在字典中再取值:另一个是包裹try块中直接去取值: Python资源共享群:484031800 def use_in(d, key):if key ...
- python在json文件中查找指定数据_Python中json的取值 如何使用python提取json中指定字段的数据...
python中为什么用json有什么作用 如何用python读取json里面的值啊我爱你,所以我给了你伤害我的权力,只要我能忍受,我会一直陪伴着你,但你不能伤害我太多. 数据如下,我想要读取name. ...
- Java|Java中int的取值范围是多少
Java 中 int 的取值范围是:-2^31 ~ 2^31-1 大致想一下,int 占 4字节,也就是 32 位,int 是有符号的,最高位为符号位.所以剩下31个位置. 那么我们大胆猜测一下,最大 ...
- Java中int的取值范围
先上代码,通过下面代码的执行结果观察 public class Test {public static void main(String[] args) {// 2的31次方int j = (int) ...
- python浮点数的范围和精度_python基础教程之C#教程之C#中float的取值范围和精度分析...
https://www.xin3721.com/eschool/pythonxin3721/ 本文实例分析了C#中float的取值范围和精度.分享给大家供大家参考.具体分析如下: float类型的表现 ...
- java int值的范围_java中int的取值范围是多少
java中int的取值范围是多少 发布时间:2020-06-26 14:53:13 来源:亿速云 阅读:159 作者:Leah 今天就跟大家聊聊有关java中int的取值范围,可能很多人都不太了解,为 ...
- python中int数据范围_Python中int的取值范围是多少
Python中int的取值范围是多少 发布时间:2020-10-30 09:33:50 来源:亿速云 阅读:66 作者:小新 这篇文章将为大家详细讲解有关Python中int的取值范围是多少,小编觉得 ...
- Struts2中EL表达式取值
http://blog.csdn.net/cuihaiyang/article/details/41950141 (写的不错,可以知道为什么struts2可以用El取属性值的问题.正常el从reque ...
最新文章
- 奥比中光Orbbec Astra Pro体感摄像头“标定全过程”
- python使用字典格式化字符串-Python字符串格式方式 %s format()
- [置顶] 强大的jquery选择器
- (转)IOS学习笔记-2015-03-29 int、long、long long取值范围
- Asp.Net Mvc3.0(MEF依赖注入实例)
- Django(part35)--多对多映射
- 在linux安装不了apache,Apache 不能安装在linux?
- php在类定义一个我静态变量,php中静态类与静态变量用法的区别分析_PHP教程
- 工作记录二-Docker+Dockerfile
- AWD-LSTM为什么这么棒? 1
- 蓝色起源成功完成“新谢泼德号”飞船第17次发射
- 华为鸿蒙系统手机央视,央视再次确认!华为投入巨资打造鸿蒙系统生态:体验媲美七成安卓...
- (转)什么时候加上android.intent.category.DEFAULT和LAUNCHER
- Java中队列的使用
- Redis的安装教程(Windows+Linux)【超详细】
- 时间序列分析:使用Pandas探索能源数据集
- 【音乐拼接】mp3格式
- 最新谷歌本地搜索api
- H5页面打开微信小程序
- 一起了解Windows——用Win10自带工具录制视频