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的用法。

Xpath JSONPath 描述
/ $ 跟节点
. @ 现行节点
/ . 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

原文地址:https://www.cnblogs.com/xyao1/p/12217713.html

时间: 2024-10-07 00:39:28

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

python中jsonpath模块的运用

1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java. 使用方法如: import jsonpathres=jsonpath.jsonpath(dic_name,'$..key_name')#嵌套n层也能取到所有key_name信息,其中:"$"表示最外层的{},".."表示模糊匹配,当传入不存在的

多层嵌套的json数据

很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", "age":18, "grade":{"gname":"三年八班", "gdesc":"初三年级八班" } } 要获得以上类型json数据,不外乎以下步骤: 1.数据库查询 sql:select

js解析多层嵌套的json,取出所有父元素属性和遍历所有子元素

已知一个多层嵌套的json,取出所有父元素和子元素的id值 思路:因为不知道到底嵌套了多少层,递归有可能造成栈溢出.查询时间特别久的问题 所以先查询一次,判断是否有子节点,如果有,取出子节点并到父节点上,并动态更改数据长度,这样无限循环处理json取出所有id menuIdInit () { var _this = this; var _menu = _this.menus; var menuId = []; var len = _menu.length; for(var i = 0; i <

使用jsonpath解析多层嵌套的json响应信息

Python自带的json库可以把请求转为字典格式, 但在多层嵌套的字典中取值往往要进行多次循环遍历才能取到相应的数据, 如: res_dict = { "code": 0, "msg": "成功", "data": { "users": [ {"name": "张三", "gender": "male", "age&

Python中matplotlib模块解析

用Matplotlib绘制二维图像的最简单方法是: 1.  导入模块 导入matplotlib的子模块 import matplotlib.pyplot as plt import numpy as np 2.  获取数据对象 给出x,y两个数组[Python列表],注意两个列表的元素个数必须相同,否则会报错 x=np.array([1,2,3,4,]) y=x*2 3.  调用画图方法 调用pyplot模块的绘图方法画出图像,基本的画图方法有:plot(将各个点连成曲线图).scatter(画

Python中的模块介绍和使用

在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块. 说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块 1.import 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入. 形如: importmodu

Python中ConfigParser模块应用

Python中ConfigParser模块应用 Python的ConfigParser模块定义了3个对INI文件进行操作的类 RawConfigParser,ConfigParser和SafeConfigParser.其中RawCnfigParser是最基础的INI文件读取类,ConfigParser.SafeConfigParser支持对%(value)s变量的解析. 下面看看怎样通过ConfigParser类来解析一个ini文件. 配置文件settings.cfg [DEFAULT] myk

Python中optionParser模块的使用方法[转]

本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: ? 1 2 3 4 5 6 7 8

SAX解析多层嵌套XML

最近工程需要解析多层嵌套XML,没有找到合适的公共解析的,要是一个类自己对应写一个解析方法,岂不累死,于是自己写了个通用的解析类.现在还不是很完善,对子类的解析需要提前指定好子类不能动态解析. 我用的是DefaultHandler来处理XML,里面方法执行过程是 public void startDocument() throws SAXException 第一个执行方法. public void startElement(String uri, String localName, String