JSONPath in Python

JSONPath ist eine Ausdruckssprache zum Parsen von JSON-Daten. Sie ist sehr ähnlich zur XPath-Ausdruckssprache zum Parsen von XML-Daten. Die Idee ist, die JSON-Daten zu parsen und den gewünschten Wert zu erhalten. Dies ist speichereffizienter, da wir nicht die gesamten JSON-Daten lesen müssen.

Python JSONPath Bibliotheken

Es gibt viele JSONPath-Bibliotheken in Python.

  • jsonpath: Ein Port der Perl- und JavaScript-Versionen von JSONPath.
  • jsonpath-rw: Die komplette Python-Implementierung der JSONPath-Ausdrücke. Die JSONPath-Ausdrücke sind erstklassige Objekte, leicht zu analysieren, transformieren, parsen, drucken und erweitern. Das Modul jsonpath-rw-ext bietet einige zusätzliche Erweiterungen, um seine Funktionalitäten zu erweitern.
  • jsonpath-ng: Die endgültige Implementierung von JSONPath, die standardkonform sein soll, einschließlich arithmetischer und binärer Vergleichsoperatoren. Diese Bibliothek vereint die Module jsonpath-rw und jsonpath-rw-ext und erweitert sie weiter.

Welche Python JSONPath-Bibliothek verwenden?

Das Modul jsonpath-ng ist das umfassendste und rein in Python geschrieben. Es unterstützt sowohl Python 2 als auch Python 3. Daher werden wir dieses Modul für Python JSONPath-Beispiele verwenden.

Installation des jsonpath-ng Moduls

Wir können das jsonpath-ng Modul mit PIP installieren.

$ pip3.7 install jsonpath-ng

Ein einfaches JSON-Datum mit JSONPath parsen

Lassen Sie uns ein einfaches Beispiel betrachten, um die JSON-Daten zu parsen und den erforderlichen Attributwert zu erhalten.

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)

Output:

[DatumInContext(value=1, path=Fields('id'), context=DatumInContext(value={'id': 1, 'name': 'Pankaj'}, path=Root(), context=None))]
id value is 1

Eine Liste mit JSONPath-Ausdruck parsen

Der JSON-Schlüssel kann eine Liste von Werten enthalten. Wir können den JSONPath-Ausdruck verwenden, um die Liste zu parsen und die Liste der Werte zu erhalten. Nehmen wir an, wir haben eine JSON-Datei „db.json“ mit folgendem Inhalt.

{"employees": [
{
"id": 1,
"name": "Pankaj",
"salary": "10000"
},
{
"name": "David",
"salary": "5000",
"id": 2
       }
   ]
}

Wir möchten diese JSON-Datei parsen und die Liste der Mitarbeiter-IDs erhalten. Wir können JSONPath-Ausdrücke verwenden, um diese Daten sehr einfach zu erhalten.

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}')

Output:

{'employees': [{'id': 1, 'name': 'Pankaj', 'salary': '10000'}, {'name': 'David', 'salary': '5000', 'id': 2}]}
Employee id: 1
Employee id: 2

Wenn Sie die Daten in eine Liste bekommen möchten, können Sie das Python List Comprehension verwenden.

emp_ids_list = [match.value for match in jsonpath_expression.find(json_data)]
print(emp_ids_list) # [1, 2]

Fazit

JSONPath bietet uns eine einfache Möglichkeit, die JSON-Daten zu parsen und spezifische Werte zu extrahieren. Es ist sehr nützlich, wenn die JSON-Daten groß sind und wir nur an einigen der Werte interessiert sind.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: