Python JSONPath示例
时间:2020-02-23 14:42:52 来源:igfitidea点击:
什么是JSONPath?
JSONPath是一种用于解析JSON数据的表达语言。
与解析XML数据的XPath表达式语言非常相似。
想法是解析JSON数据并获取所需的值。
这样可以提高内存效率,因为我们不需要读取完整的JSON数据。
Python JSONPath库
Python中有许多JSONPath库。
jsonpath:这是Perl和JavaScript版本的JSONPath的端口。
jsonpath-rw:JSONPath表达式的完整Python实现。
JSONPath表达式是一流的对象,易于分析,转换,解析,打印和扩展。
jsonpath-rw-ext模块提供了一些其他扩展来扩展其功能。jsonpath-ng:JSONPath的最终实现,旨在实现标准兼容,包括算术和二进制比较运算符。
该库合并了jsonpath-rw和jsonpath-rw-ext模块,并进一步对其进行了增强。
使用哪个Python JSONPath库?
jsonpath-ng模块是最全面的模块,仅用Python编写。
它同时支持Python 2和Python3。
因此,我们将该模块用于Python JSONPath示例。
安装jsonpath-ng模块
我们可以使用PIP安装jsonpath-ng模块。
$pip3.7 install jsonpath-ng
Python jsonpath-ng安装
使用JSONPath解析简单的JSON数据
让我们看一个简单的示例,解析JSON数据并获取所需的属性值。
import json from jsonpath_ng import jsonpath, parse json_string = '{"id":1, "name":"hyman"}' json_data = json.loads(json_string) jsonpath_expression = parse('$.id') match = jsonpath_expression.find(json_data) print(match) print("id value is", match[0].value)
输出:
[DatumInContext(value=1, path=Fields('id'), context=DatumInContext(value={'id': 1, 'name': 'hyman'}, path=Root(), context=None))] id value is 1
我们正在使用json模块将JSON字符串转换为字典。
使用JSONPath表达式解析列表
JSON键可以包含值列表。
我们可以使用JSONPath表达式来解析列表并获取值列表。
假设我们有一个包含以下内容的JSON文件" db.json"。
{ "employees": [ { "id": 1, "name": "hyman", "salary": "10000" }, { "name": "David", "salary": "5000", "id": 2 } ] }
我们要解析此JSON文件并获取员工ID列表。
我们可以使用JSONPath表达式非常轻松地获取此数据。
import json from jsonpath_ng import jsonpath, parse with open("db.json", 'r') as json_file: json_data = json.load(json_file) print(json_data) jsonpath_expression = parse('employees[*].id') for match in jsonpath_expression.find(json_data): print(f'Employee id: {match.value}')
输出:
{'employees': [{'id': 1, 'name': 'hyman', 'salary': '10000'}, {'name': 'David', 'salary': '5000', 'id': 2}]} Employee id: 1 Employee id: 2
如果要将数据放入列表中,可以使用Python列表理解。
emp_ids_list = [match.value for match in jsonpath_expression.find(json_data)] print(emp_ids_list) # [1, 2]