JsonPath 与 XPath 语法对比:
Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法:
XPath | JSONPath | 描述 |
/ | $ | 根节点 |
. | @ | 现行节点 |
/ | .or[] | 取子节点 |
.. | n/a | 取父节点,Jsonpath未支持 |
// | .. | 就是不管位置,选择所有符合条件的条件 |
* | * | 匹配所有元素节点 |
@ | n/a | 根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。 |
[] | [] | 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等) |
| | [,] | 支持迭代器中做多选。 |
[] | ?() | 支持过滤操作. |
n/a | () | 支持表达式计算 |
() | n/a | 分组,JsonPath不支持 |
jsonpath 简单示例:
data1 = {'foo': [{'baz': 'news'}, {'baz': 'music'}]}
from jsonpath_rw import jsonpath,parse
jsonpath_exp = parse('foo[*].baz')
list_r = jsonpath_exp.find(data1)
for l in list_r:print(l.value)
data2 = {'foo': [{'baz': 'news2'}, {'baz': 'music2'}]}
import jsonpath
# list_r2 = jsonpath.jsonpath(data2,'$..baz') #也可以
list_r2 = jsonpath.jsonpath(data2,'foo[*].baz')
for l in list_r2:print(l)
输出:
news
music
news2
music2