python 中jsonpath模块
from jsonpath import jsonpath
一、概念,jsonpath是什么
jsonpath是一种简单的方法,来提取给定json文档中的部分内容;
jsonpath方法需要两个参数,一个是数据,一个是jsonpath表达式;
官方给出的函数定义:
def jsonpath(obj, expr, result_type='VALUE', debug=0, use_eval=True)
注意:
如果没有匹配到数据,返回False;
如果匹配到数据,返回的是包含数据的列表;
返回的是list列表,如果要用返回的数据,记得用下标取数;
二、jsonpath的语法
jsonpath |
解释 |
Description |
$ | 根元素 | the root object/element |
. 或 [] | 子元素 | child operator |
.. | 递归下降。JSONPath从E4X借用了这个语法。 | recursive descent. JSONPath borrows this syntax from E4X. |
@ | 当前元素 | the current object/element |
?() | 应用过滤表达式;一般需要结合[?(@ )]来使用 | applies a filter (script) expression. |
[] | (数组)下标操作符。XPath使用它遍历元素集合和谓词。在Javascript和JSON中,它是原生数组操作符。 | subscript operator. XPath uses it to iterate over element collections and for predicates. In Javascript and JSON it is the native array operator. |
[,] |
选择多个字段; 也可以切片[m:n],但是不能这样使用[-1] |
Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set. |
() | 脚本表达式,使用在脚本引擎下面 | script expression, using the underlying script engine. |
@一般和条件过滤一起使用,如 [?(@.条件)];
三、实例
data3={'code':200,'data':[{'id':1,'name':'lili'}, {'id':4,'name':'lucy'}, {'id':2,'name':'keepr'},]} # 取data下的第一个名字 print(jsonpath(data3,"$.data[0].name")) # 等同于上面,因. []都代表子元素;同时[]代表数组索引 print(jsonpath(data3,"$.[data][0][name]")) # 取id等于4的name,此时用到条件筛选 print(jsonpath(data3,"$.data[?(@.id==4)].name"))
运行后结果
['lili'] ['lili'] ['lucy']
四、其他
关于条件筛选,为方便记忆与理解,做了下拆分;如果有误,欢迎各位大佬指正,感谢