在网络数据传输中,早年一直使用xml格式进行。随着技术的发展更新,一种体积更小的数据格式:json,渐渐受到程序员的青睐。发展到2022年,基本上大部分的互联网公司,在进行接口设计时已经完全不考虑使用xml格式来传递数据了。
可以说,在服务端的数据传输这一块,json已经完全取代xml了。不管是web前端开发人员还是后端开发人员,工作中必然涉及到需要对json进行解析。
今天,要给大家推荐的就是一款json解析利器。也许你会说,json解析也值得专门拿一篇文章来介绍?
我Fastjson、Gson、Jackson用得炉火纯青,6得飞起。但是今天的主角jsonpath,确实值得单独介绍,尤其是在解析复杂json、需要对json数据进行预筛选和处理的场景下,TA可以说吊打其他json解析工具。
不信?那你接着往下看。
jsonpath支持在各个编程语言中使用,Javascript、Python、PHP、Java,统统都能支持。
json为什么能够取xml而代之?
在正式开始介绍jsonpath之前,想问一问大家,有没有想过为什么在网络数据传输领域,json能取代xml?json相比于xml,最大的优势在于:json的语法更加简洁。
表达同样的内容,json占用的空间更小。而数据体积越小,在传输过程中,就能做到传输速度更快。
我们简单来看一个例子。
首先,用xml描述一个人的信息。
<person> <name>张三</name> <age>26</age> <city>北京</city> </person>
然后,用json描述一个人的信息。
{ "name":"张三", "age":26, "city":"北京" }
不出意外,一眼就能看出二者的区别,很明显json用到的字符更少,占用的存储空间更小。
传统的json处理
通常我们在进行json解析的时候,都不需要太过复杂的处理方式。只需要将json转为对象,或者对象转为json即可。
能够处理这种需求的工具很多,比如阿里开发的Fastjson、谷歌开发的Gson,都能满足这样简单的需求。
可如果是十分复杂的json呢?比如说一层套一层、json数组套json对象,对象里又套数组... ...循环多层
这种情况怎么解析?单单只是想一下就十分头疼了。
这种情况下,使用jsonpath就很简单了。因为jsonpath可以使用表达式的方式,对json数据进行方便、高效的解析。
jsonpath引入
不同的编程语言,引入jsonpath的方法不同,此处使用Java作为演示。不管你是什么编程语言,都能通过这个例子理解到jsonpath的用法。
<dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency>
jsonpath解析复杂json数据
下面是一个多层嵌套的复杂的json数据。
{ "productName":"电脑", "brand":[ { "name":"戴尔", "price":5000, "parts":{ "parts_3":"键盘", "parts_2":"鼠标", "parts_1":"电源", } }, { "name":"华硕", "price":8000 } ] }
使用jsonpath来进行解析,获取到最深层的数据。
获取到第四层数据的表达式:$.brand[0].parts.parts_1。
String json = "xxxx";//json字符串 //初始化解析 Object document = Configuration.defaultConfiguration().jsonProvider().parse(json); //获取值 String parts1 = JsonPath.read(document, "$.brand[0].parts.parts_1"); //打印结果 System.out.println("取到的值:"+parts1);
控制台打印结果:
通过表达式的写法,我们能够轻松地取出位于第n层地数据,哪怕n=8、n=9... ...n=100,jsonpath都能以非常快的速度返回结果。
jsonpath高级用法
1.举一个例子,展示一下jsonpath的高级用法:取出价格大于5000的电脑数据。
还是使用上文的json数据来解析。
价格大于5000数据的表达式:$.brand[?(@.price > 5000)]。
//略。。。 //获取值 net.minidev.json.JSONArray parts1 = JsonPath.read(document, "$.brand[?(@.price > 5000)]"); //打印结果 System.out.println("取到的值:"+parts1);
控制台打印结果:
jsonpath不仅解析数据很简单,还能对数据进行过滤处理。
数据过滤主要依赖逻辑运算符来完成。
jsonpath的逻辑运算符(部分):
- == : 左边等于右边;
- != : 左边不等于右边;
- < : 左边小于右边;
- <= : 左边小于或等于右边;
- > : 左边大于右边;
- >= : 左边大于或等于右边
除开逻辑运算符,jsonpath还提供了一些函数供开发者使用。
2.举例:统计品牌提供商的数量;
获取数量的表达式:$.brand.length()。
//略。。。 //获取值 Integer parts1 = JsonPath.read(document, "$.brand.length()"); //打印结果 System.out.println("取到的值:"+parts1);
控制台打印结果:
jsonpath的函数(部分):
- min() :获取数组最小值;
- max() :获取数组最大值;
- avg() :获取数组平均值;
- length() :获取数组长度;
好了,今天的介绍就到这里,有没有感觉jsonpath使用十分方便呢?
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/9723/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料