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.