jsonpath的简单应用

        这里是清安,本篇我们简单的学习一下jsonpath取值。前面说过一些字典取值,列表取值,元组取值,字符串取值,正则表达式等等。其实前面的理解了,此处理解起来就不会太难。

        对于jsonpath的定义:JSONPath 表达式始终引用 JSON 结构,就像 XPath 表达式与 XML 文档结合使用一样。由于 JSON 结构通常是匿名的,并且不一定具有“根成员对象”,因此 JSONPath 假定$分配给外层对象的抽象名称。

JSONPath表达式可以使用点- 表示法
$.store.book[0].title
或括号- 表示法
$['store']['book'][0]['title']

        看着是有点懵逼吧,一起看看实例吧:

# -->>>清安<<<---
import jsonpath

a = {"home": {
    "information": [
        {"name": "清安",
         "sex": "男",
         "age": 18,
         "Telephone": 12345678900
         },
        {"name": "QA",
         "sex": "男",
         "age": 19,
         "Telephone": 98765432100
         },
        {"name": "AQA",
         "sex": "女",
         "age": 20,
         "Telephone": 1597532486200
         },
        {"name": "QAQ",
         "sex": "女",
         "age": 19,
         "Telephone": 96385274100
         }
    ],
    "hobby": {
        "Bicycle": "red",
        "car": "yellow"
    }
}
}

        我们来看看上面这个例子,根据例子来说一些实例。

获取所有name键对应的值

# -->>>清安<<<---
import jsonpath

i = jsonpath.jsonpath(a,"$..name")
print(i)

# ['清安', 'QA', 'AQA', 'QAQ']

获取所有Telephone对应的值

# -->>>清安<<<---
import jsonpath


o = jsonpath.jsonpath(a,'$.home..Telephone')

print(o)

        这里运用第一种写法也是可以的哦。直接$..Telephone。

获取home下的information下的全部性别

# -->>>清安<<<---
import jsonpath

p = jsonpath.jsonpath(a,'$.home.information[*].sex')
print(p)

        其实方法都是类似的,以上三种例子大可以用同一种方式来写,灵活多变,看你自己所取得数据的结构是怎么样的了。下面给列出一些例子,以便于后续的查阅:

XPathJSON路径描述
/$根对象/元素
.@当前对象/元素
/. 或者 []子运算符
..不适用父运算符
//..递归下降。JSONPath 从 E4X 借用了这种语法。
**通配符。所有对象/元素,无论其名称。
@不适用属性访问。JSON 结构没有属性。
[][]下标运算符。XPath 使用它来迭代元素集合。在 Javascript 和 JSON 中,它是本机数组运算符。
|[,]XPath 中的联合运算符导致节点集的组合。JSONPath 允许将备用名称或数组索引作为一组。
不适用[开始:结束:步骤]从 ES4 借来的数组切片运算符。
[]?()应用过滤器(脚本)表达式。
不适用()脚本表达式,使用底层脚本引擎。
()不适用Xpath 中的分组

        此处所列举只是部分,但也够用。

XPathJSON路径结果
/home/book/author$.store.book[*].author店内所有书籍的作者
//author$..author所有作者
/store/*$.store.*所有东西都在商店里,包括一些书和一辆红色自行车。
/store//price$.store..price商店里所有东西的价格。
//information[3]$..information[2]第三个人信息
//information[last()]$..information[(@.length-1)]
$..information[-1:]
按顺序排列的最后一个人信息。
//information[position()<3]$..information[0,1]
$..information[:2]
前两个人信息
//information[sex]$..information[?(@.sex)]过滤所有带有 sex的信息
//information[age<19]$..information[?(@.age<19)]过滤并所有年龄低于 19岁人的信息
//*$..*XML 文档中的所有元素。JSON结构的所有成员。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清安无别事

慢慢的积累一杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值