python的jsonpath_python 提取json数据的jsonPath介绍及简单使用

为什么要用jsonpath

就跟为什么要用xpath一样,jsonpath的设计灵感来源于xpath。一个强大的json数据提取工具。让用户不用编写脚本就可以提取到相应的json数据。

jsonpath的语法

jsonpath可以什么这两种模式来检索数据:

以点为分隔

$.store.book[0].title

$.store.book[0,1] #可以取到第一个和第二个book值

$.store.book[*].title #可以取到所的的book值

以中括号为分隔

$['store']['book'][0]['title']

对于输入.路径,内中路径将始终使用更通用的中括号模式。 (我猜是因为jsonpath在python中是dict,访问方式刚好是用中括号)

还支持[start:end:step]模式

"$.store.book[0:3:2].title" #和python中的range步长计算是一致的

@符号表达式:即可以用来代表长度,也可以用来代表name。

$.store.book[(@.length-1)].title #取到最后一个book的title

$.store.book[?(@.price < 10)].title #取到价格小于10的书的title

jsonpath的xpath的语法比较:

XPath

JSONPath

描述

/

$

根节点

.

@

现行节点

/

.or[]

取子节点

..

n/a

取父节点,Jsonpath未支持

//

..

就是不管位置,选择所有符合条件的条件

*

*

匹配所有元素节点

@

n/a

根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要属性访问。

[]

[]

迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)

|

[,]

支持迭代器中做多选。

[]

?()

支持过滤操作.

n/a

()

支持表达式计算

()

n/a

分组,JsonPath不支持

jsonPath的使用示例

----------------

from jsonpath import jsonpath

data = {...} #这个数据是下面的example data

print(jsonpath(data, "$.store.book[0:3:2].title")) #按步长取,到第1个和第3本书的titile

print(jsonpath(data, "$.store.book[0:2:2].title")) #按步长取到第1本书的titile

print(jsonpath(data, "$.store.book[?(@.price < 10)].title")) #取价格小于10的书的title

print(jsonpath(data, "$..store.book[(@.length -1)].title")) #取最后一本书的title

----------------

example data:

----------------

{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }

----------------

参考

jsonPath官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值