开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
1.什么是jsonpath?
之前的文章里面提到xpath是用于提取HTML\XML类型的数据,jsonpath则是用于提取json格式的数据
2.jsonpath的安装与使用
jsonpath的详细文档:goessner.net/articles/Js…
安装命令:pip install jsonpath
3.jsonpath的语法
$ : 根节点
@ : 现行节点
.or[] :取子节点
n/a : 取父节点,Jsonpath未支持
.. : 就是不管位置,选择所有符合条件的条件
星号* :匹配所有元素节点
n/a :根据属性访问,Json不支持,因为Json是个Kev-value递归结构,不需要属性
[] : 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
[,] : 支持迭代器中做多选。
?() : 支持过滤操作.
() : 支持表达式计算
n/a :分组,JsonPath不支持
4.举例
"book": [
{ "category": "r",
"author": "N",
"title": "S",
"price": 8,
"time":"2011"
},
{ "category": "f",
"author": "E",
"title": "S",
"price": 22,
"time":"2001"
},
{ "category": "f",
"author": "H",
"title": "M",
"isbn": "3",
"price": 33,
"time":"2011"
},
],
"bicycle": {
"color": "white",
"price": 5,
"time":"2013"
}
"music":{
"name":"vc",
"time":"1998",
"author":"jon"
}
}
}
$.store.book[*].author :store中的所有的book的作者
$..author :所有的作者
$..time :所有的发行时间
$.store.* :store下的所有的元素
$.store..price :store中的所有的内容的价格
$..book[2] :第三本书
..book[-1:] :最后一本书
..book[:2] :前两本书
$..book[?(@.isbn)] : 获取有isbn的所有数
$..book[?(@.price<10)] :获取价格大于10的所有的书
$..* : 获取所有驱数据
再举个例子:
{"clusters": {
"cpvFeatureData": {
"checkedNum": "0",
"clkValue": "clk_page=keyword;leaf_cateid=134;cpv_clk_id=",
"exposureValue": "imps_page=keyword;leaf_cateid=134;cpv_imps_id=6500007641,6500008313,6500008274,6500007620,",
"title": {
"name": "SUGGESTED FILTERS"
},
"type": "SUGGESTED FILTERS",
"values": [
{
"back": false,
"checked": false,
"href": "//www.alibaba.com/trade/search?fsb=y&IndexArea=product_en&categoryId=134&clusterId=6500007641&keywords=Agricultural+Machinery+Parts&viewtype=L&",
"id": "6500007641",
"image": "//sc01.alicdn.com/kf/HTB1DFGFrQCWBuNjy0Faq6xUlXXaZ.jpg_100x100.jpg",
"name": "Oil Pump",
"noXpjax": false
},
{
"back": false,
"checked": false,
"href": "//www.alibaba.com/trade/search?fsb=y&IndexArea=product_en&categoryId=134&clusterId=6500008313&keywords=Agricultural+Machinery+Parts&viewtype=L&",
"id": "6500008313",
"image": "//sc01.alicdn.com/kf/HTB1XkzKKf5TBuNjSspmq6yDRVXaK.jpg_100x100.jpg",
"name": "Piston",
"noXpjax": false
},
{
"back": false,
"checked": false,
"href": "//www.alibaba.com/trade/search?fsb=y&IndexArea=product_en&categoryId=134&clusterId=6500008274&keywords=Agricultural+Machinery+Parts&viewtype=L&",
"id": "6500008274",
"image": "//sc01.alicdn.com/kf/HTB1CbGiRXXXXXbAaFXX760XFXXXB.png_100x100.jpg",
"name": "Gear",
"noXpjax": false
},
{
"back": false,
"checked": false,
"href": "//www.alibaba.com/trade/search?fsb=y&IndexArea=product_en&categoryId=134&clusterId=6500007620&keywords=Agricultural+Machinery+Parts&viewtype=L&",
"id": "6500007620",
"image": "//icbu-cpv-image.oss-us-west-1.aliyuncs.com/Laidong-4L22BT-Water-Pump-4L22BT-Diesel-Engine.jpg_100x100.jpg",
"name": "Water Pump",
"noXpjax": false
}
}
可以拿着个练练手:
取出所有的名字:$..name
取出value列表中的第三个字典的id: ?
欢迎在评论区分享你的答案
5.使用jsonpath的注意点
(1)jsonpath的导入使用,导入命令:from jsonpath import jsonpath,我们需要使用的是jsonpath这个库中的jsonpath这个类中的方法,所以不能直接导入jsonpath
(2)jsonpath是对json类型的数据进行提取,有些数据看起来是json类型的但实际可能是str类型的,所以使用jsonpath对数据进行提取时首先看一下数据类型,如果不是json格式的要先转换成json格式的然后再使用jsonpath进行数据提取。
以上就是jsonpath的数据提取的知识点了,有人会私信我说语法有点多记不住怎么办,勤加练习就好了,用的多了自然就记住了。