这里是清安,本篇我们简单的学习一下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)
其实方法都是类似的,以上三种例子大可以用同一种方式来写,灵活多变,看你自己所取得数据的结构是怎么样的了。下面给列出一些例子,以便于后续的查阅:
XPath | JSON路径 | 描述 |
/ | $ | 根对象/元素 |
. | @ | 当前对象/元素 |
/ | . 或者 [] | 子运算符 |
.. | 不适用 | 父运算符 |
// | .. | 递归下降。JSONPath 从 E4X 借用了这种语法。 |
* | * | 通配符。所有对象/元素,无论其名称。 |
@ | 不适用 | 属性访问。JSON 结构没有属性。 |
[] | [] | 下标运算符。XPath 使用它来迭代元素集合。在 Javascript 和 JSON 中,它是本机数组运算符。 |
| | [,] | XPath 中的联合运算符导致节点集的组合。JSONPath 允许将备用名称或数组索引作为一组。 |
不适用 | [开始:结束:步骤] | 从 ES4 借来的数组切片运算符。 |
[] | ?() | 应用过滤器(脚本)表达式。 |
不适用 | () | 脚本表达式,使用底层脚本引擎。 |
() | 不适用 | Xpath 中的分组 |
此处所列举只是部分,但也够用。
XPath | JSON路径 | 结果 |
/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结构的所有成员。 |