Автор оригинала: Pankaj Kumar.
Что такое jsonpath?
JSONPath – это язык выражения для анализа данных JSON. Это очень похоже на язык выражения выражения XPath для анализа данных XML.
Идея состоит в том, чтобы разбирать данные JSON и получить нужное значение. Это более эффективно памяти, потому что нам не нужно читать полные данные JSON.
Библиотеки python jsonpath.
В Python есть много библиотек JSONPath.
- jsonpath : Это порт Perl, и версии JavaScript jsonpath.
- jsonpath-rw : Полная реализация Python выражения JSONPath. Выражения JSONPath являются объектами первого класса, легко анализировать, преобразовывать, анализировать, распечатывать и расширять. jsonpath-rw-ext Модуль предоставляет некоторые дополнительные расширения для расширения его функциональности.
- jsonpath-ng : Окончательная реализация JSONPath, которая направлена на стандартное соответствие, включая арифметические и двоичные операторы сравнения. Эта библиотека объединяет JSONPATH-RW и JSONPATH-RW-EXT модули и дополнительно улучшает его.
Какая библиотека Python JCONPATH?
jsonpath-ng Модуль является наиболее всеобъемлющим и написанным чисто в Python. Он поддерживает как Python 2, так и Python 3. Итак, мы будем использовать этот модуль для примеров Python JSONPath.
Установка модуля JSONPATH-NG
Мы можем установить модуль JSONPATH-NG, используя PIP.
$ pip3.7 install jsonpath-ng
Python 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
Мы используем модуль JSOL для преобразования строки JSON в словарь.
Разбор списка с использованием выражения 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
Если вы хотите получить данные в список, вы можете использовать понимание списка Python.
emp_ids_list = [match.value for match in jsonpath_expression.find(json_data)] print(emp_ids_list) # [1, 2]
Заключение
JCONPATH дает нам простой способ разбора данных JSON и извлечь определенные значения. Это очень полезно, когда данные JSON огромны, и мы заинтересованы только в нескольких ценностях.
Рекомендации
- jsonpath.com : Чтобы проверить действительность выражения JSONPPATH
- jsonlint.com : Проверять данные JSON