Примеры Python JSONPath
Что такое JSONPath?
JSONPath — это язык выражений для анализа данных JSON. Он очень похож на язык выражений XPath для анализа XML-данных. Идея состоит в том, чтобы проанализировать данные JSON и получить желаемое значение. Это более эффективно для памяти, потому что нам не нужно читать полные данные JSON.
Библиотеки Python JSONPath
В Python есть много библиотек JSONPath.
- jsonpath: это порт версий JSONPath для Perl и JavaScript.
- Модуль jsonpath-rw-ext предоставляет некоторые дополнительные расширения для расширения его функциональных возможностей.
- jsonpath-ng: окончательная реализация JSONPath, которая должна соответствовать стандартам, включая арифметические и бинарные операторы сравнения. Эта библиотека объединяет модули jsonpath-rw и jsonpath-rw-ext и дополнительно расширяет их.
Какую библиотеку Python JSONPath использовать?
Модуль jsonpath-ng является наиболее полным и написан исключительно на Python. Он поддерживает как Python 2, так и Python 3. Итак, мы будем использовать этот модуль для примеров Python JSONPath.
Установка модуля jsonpath-ng
Мы можем установить модуль jsonpath-ng, используя PIP.
$ pip3.7 install jsonpath-ng
Анализ простых данных JSON с использованием JSONPath
Давайте рассмотрим простой пример, чтобы проанализировать данные JSON и получить требуемое значение атрибута.
import json
from jsonpath_ng import jsonpath, parse
json_string = '{"id":1, "name":"Pankaj"}'
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': 'Pankaj'}, path=Root(), context=None))]
id value is 1
Мы используем словарь.
Разбор списка с использованием выражения JSONPath
Ключ JSON может содержать список значений. Мы можем использовать выражение JSONPath для анализа списка и получения списка значений. Допустим, у нас есть файл JSON \db.json со следующим содержимым.
{
"employees": [
{
"id": 1,
"name": "Pankaj",
"salary": "10000"
},
{
"name": "David",
"salary": "5000",
"id": 2
}
]
}
Мы хотим проанализировать этот файл JSON и получить список идентификаторов сотрудников. Мы можем использовать выражения 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': 'Pankaj', 'salary': '10000'}, {'name': 'David', 'salary': '5000', 'id': 2}]}
Employee id: 1
Employee id: 2
Рекомендуем прочитать: f-строки Python — PEP 498 — буквальная интерполяция строк
Если вы хотите получить данные в список, вы можете использовать понимание списка Python.
emp_ids_list = [match.value for match in jsonpath_expression.find(json_data)]
print(emp_ids_list) # [1, 2]
Заключение
JSONPath предоставляет нам простой способ анализа данных JSON и извлечения определенных значений. Это очень полезно, когда данные JSON огромны, а нас интересует лишь несколько значений.
Рекомендации
- jsonpath.com: для проверки правильности выражения JSONPath
- jsonlint.com: для проверки данных JSON