jsonpath解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsonpath解析相关的知识,希望对你有一定的参考价值。

参考技术A

import json 导入库

显示json格式字符串为

显示对象为list,如下,显示内容实际为lt

运行后会在本地生成一个json.txt文件

json.txt文件内容为:

显示为list对象,实际为lt列表如下:

以上方式均为python处理方式

将json格式字符串转化为js对象

xpath索引下标是从1开始的
jsonpath索引下标是从0开始

方法案例使用:

显示所有book.json内容,将其转化为obj对象

显示:

显示:

显示:

显示:

显示:

显示:

显示:

显示:

显示:

以上主要学习将json格式字符串转化为python对象,然后使用对应方法

python中jsonpath模块,解析多层嵌套的json数据

1. jsonpath介绍
用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

使用方法如:

import jsonpath
res=jsonpath.jsonpath(dic_name,‘$..key_name‘)
#嵌套n层也能取到所有key_name信息,其中:“$”表示最外层的{},“..”表示模糊匹配,当传入不存在的key_name时,程序会返回false


2. JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。

        安装方法:pip install jsonpath
     
        官方文档:http://goessner.net/articles/JsonPath

3. JsonPath与XPath语法对比:

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

XpathJSONPath描述
/ $ 跟节点
. @ 现行节点
/ . or [] 取子节点
.. n/a 就是不管位置,选择所有符合条件的条件
* * 匹配所有元素节点
[] [] 迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
&#124 [,] 支持迭代器中做多选
[] ?() 支持过滤操作
n/a () 支持表达式计算
() n/a 分组,JsonPath不支持

4. 使用实例

技术图片
d={
        "error_code": 0,
        "stu_info": [
                {
                        "id": 2059,
                        "name": "小白",
                        "sex": "",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "18378309272",
                        "gold": 10896,
                        "info":{
                            "card":434345432,
                            "bank_name":中国银行
                        }

                },
                {
                        "id": 2067,
                        "name": "小黑",
                        "sex": "",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "12345678915",
                        "gold": 100
                }
        ]
}

res= d["stu_info"][1][name‘] #取某个学生姓名的原始方法:通过查找字典中的key以及list方法中的下标索引
print(res) #输出结果是:小黑

import jsonpath
res1=jsonpath.jsonpath(d,$..name‘) #嵌套n层也能取到所有学生姓名信息,$表示最外层的{},..表示模糊匹配
print(res1) #输出结果是list:[‘小白‘, ‘小黑‘]

res2= jsonpath.jsonpath(d,$..bank_name)
print(res2) #输出结果是list:[‘中国银行‘]

res3=jsonpath.jsonpath(d,$..name123‘) #当传入不存在的key(name)时,返回False
print(res3) #输出结果是:False

以上是关于jsonpath解析的主要内容,如果未能解决你的问题,请参考以下文章

实用的jsonpath模块

实用的jsonpath模块

使用 php jsonpath 解析 JSON

jsonpath解析

JSONPath 解析 JSON 完整内容详解

JsonPath