jsonpath
jsonpath第三方模块。
jsonpath是json的XPath工具,简单说就是从 字典对象 中查找数据更方便,可以解析多层嵌套的json数据。
不使用jsonpath时查询 字典对象 中的数据需要一层一层的查找数据,太麻烦了。
使用jsonpath后就不需要从 字典对象 中一层一层的查询数据,从而解决太麻烦的问题。
安装:
pip install jsonpath
导入:
import jsonpath
使用:
jsonpath.jsonpath(obj, expr, result_type='VALUE')
"""
参数:
obj 字典对象
expr 查询数据的表达式,JSONPath
result_type 有三个值选择:'VALUE'(默认)、'IPATH'、'PATH'
"""
源码:
XPath 与 JSONPath 对应语法:
实例:
import jsonpath
dic = {
'total':10,
'code':200,
'data':[
{'name': '小王', 'age': 23, 'sex': '男', 'addr': '社会大学'},
{'name': '小李', 'age': 21, 'sex': '男', 'addr': '社会大学'},
{'name': '小明', 'age': 28, 'sex': '男', 'addr': '社会大学'},
{'name': '老王', 'age': 20, 'sex': '男', 'addr': '社会大学'},
{'name': '狗蛋', 'age': 25, 'sex': '男', 'addr': '社会大学'},
{'name': '小丽', 'age': 21, 'sex': '女', 'addr': '社会大学'},
{'name': '小梅', 'age': 22, 'sex': '女', 'addr': '社会大学'}
]
}
print(jsonpath.jsonpath(dic,'$..name'))
输出结果:
jsonpath第三个参数result_type:
值是 ‘IPATH’ 时:
print(jsonpath.jsonpath(dic,'$..name',"IPATH"))
输出结果:
值是 ‘PATH’ 时:
print(jsonpath.jsonpath(dic,'$..name',"PATH"))
输出结果:
jsonpath.py源码的 __main__:
if __name__ == '__main__':
try:
import json # v2.6
except ImportError:
import simplejson as json
import sys
# XXX take options for output format, output file, debug level
if len(sys.argv) < 3 or len(sys.argv) > 4:
sys.stdout.write("Usage: jsonpath.py FILE PATH [OUTPUT_TYPE]\n")
sys.exit(1)
object = json.load(file(sys.argv[1]))
path = sys.argv[2]
format = 'VALUE'
if len(sys.argv) > 3:
# XXX verify?
format = sys.argv[3]
value = jsonpath(object, path, format)
if not value:
sys.exit(1)
f = sys.stdout
json.dump(value, f, sort_keys=True, indent=1)
f.write("\n")
sys.exit(0)
jsonpath相关链接:
http://www.ultimate.com/phil/python/#jsonpath
https://goessner.net/articles/JsonPath/
https://github.com/masukomi/jsonpath-perl/tree/master
-----结束------
仅学习。