jsonpath语法的基本使用
jsonpath的安装及使用方式:
pip安装:
Python3.7\Scripts> pip install jsonpath
jsonpath的使用:
obj = json.load(open('json文件', 'r', encoding='utf‐8'))
ret = jsonpath.jsonpath(obj, 'jsonpath语法')
读取json数据
jsonpath语法元素和对应XPath元素的对比。
XPath | josnPath | Description |
/ | $ | 表示根元素 |
. | @ | 当前元素 |
/ | . or [] | 子元素 |
.. | n/a | 父元素 |
// | .. | 递归下降,JSONPath是从E4X借鉴的。 |
* | * | 通配符,表示所有的元素 |
@ | n/a | 属性访问字符 |
[] | [] |
子元素操作符
|
| | [,] |
连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。
|
n/a | [start:end:step] |
数组分割操作从ES4借鉴。
|
[] | ?() |
应用过滤表示式
|
n/a | () |
脚本表达式,使用在脚本引擎下面。
|
() | n/a | Xpath分组 |
{ "store": {
"book": [
{ "category": "修真",
"author": "六道",
"title": "坏蛋是怎样练成的",
"price": 8.95
},
{ "category": "修真",
"author": "天蚕土豆",
"title": "斗破苍穹",
"price": 12.99
},
{ "category": "修真",
"author": "唐家三少",
"title": "斗罗大陆",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "修真",
"author": "南派三叔",
"title": "星辰变",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"author": "老马",
"color": "黑色",
"price": 19.95
}
}
}
XPath | JSONPath | 结果 |
/store/book/author |
$.store.book[*].author |
书点所有书的作者
|
//author |
$..author |
所有的作者
|
/store/* |
$.store.* |
store的所有元素。所有的bookst和bicycle
|
/store//price |
$.store..price |
store里面所有东西的price
|
//book[3] |
$..book[2] |
第三个书
|
//book[last()] |
$..book[(@.length-1)] |
最后一本书 |
//book[position()<3] |
$..book[0,1]
$..book[:2] |
前面的两本书。 |
//book[isbn] |
$..book[?(@.isbn)] |
过滤出所有的包含isbn的书。 |
//book[price<10] |
$..book[?(@.price<10)] |
过滤出价格低于10的书。 |
//* |
$..* |
所有元素。
|
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 参数;json对象,书店.所有书的.作者 author_list = jsonpath.jsonpath(obj,'$.store.book[*].author') print(author_list)
通过下标获取,第1本书名 jsonpath.jsonpath(obj,'$.store.book[0].author')
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 所有的作者 author_list = jsonpath.jsonpath(obj,'$..author') print(author_list)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # store下面的所有的元素 tag_list = jsonpath.jsonpath(obj,'$.store.*') print(tag_list)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # store里面所有东西的price钱 price_list = jsonpath.jsonpath(obj,'$.store..price') print(price_list)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 第三个书,所有信息 book = jsonpath.jsonpath(obj,'$..book[2]') print(book)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 最后一本书(最后一本书下标,长度-1) book = jsonpath.jsonpath(obj,'$..book[(@.length-1)]') print(book)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 前面的两本书 # book_list = jsonpath.jsonpath(obj,'$..book[0,1]') book_list = jsonpath.jsonpath(obj,'$..book[:2]') print(book_list)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 条件过滤需要在()的前面添加一个? # 过滤出所有的包含isbn的书。 book_list = jsonpath.jsonpath(obj,'$..book[?(@.isbn)]') print(book_list)
# _*_ coding : utf-8 _*_ # @Time : 2021/11/5 15:15 # @Author : 秋泊酱 # @File : jsonpath 语法的使用 import json import jsonpath # 读取json文件 obj = json.load(open('jsonpath.json', 'r', encoding='utf-8')) # 哪本书超过了10块钱 book_list = jsonpath.jsonpath(obj,'$..book[?(@.price>10)]') print(book_list)