Рубрики
Без рубрики

Примеры Python Jsonpath

Что такое jsonpath? JSONPath – это язык выражения для анализа данных JSON. Это очень похоже на язык выражения выражения XPath для анализа данных XML. Идея есть

Автор оригинала: Pankaj Kumar.

Что такое jsonpath?

JSONPath – это язык выражения для анализа данных JSON. Это очень похоже на язык выражения выражения XPath для анализа данных XML.

Идея состоит в том, чтобы разбирать данные JSON и получить нужное значение. Это более эффективно памяти, потому что нам не нужно читать полные данные JSON.

Библиотеки python jsonpath.

В Python есть много библиотек JSONPath.

  1. jsonpath : Это порт Perl, и версии JavaScript jsonpath.
  2. jsonpath-rw : Полная реализация Python выражения JSONPath. Выражения JSONPath являются объектами первого класса, легко анализировать, преобразовывать, анализировать, распечатывать и расширять. jsonpath-rw-ext Модуль предоставляет некоторые дополнительные расширения для расширения его функциональности.
  3. 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