首页 > IT圈内 > 100层的json数据,用一行代码就解析出来了,嗖的一下...
2022
07-09

100层的json数据,用一行代码就解析出来了,嗖的一下...

在网络数据传输中,早年一直使用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使用十分方便呢?

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取