Website-Suche

Python JSONPath Beispiele


Was ist JSONPath?

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 kompletten JSON-Daten lesen müssen.

Python JSONPath-Bibliotheken

Es gibt viele JSONPath-Bibliotheken in Python.

  1. Es ist eine Portierung der Perl- und JavaScript-Versionen von JSONPath.
  2. jsonpath-rw: Die vollständige Python-Implementierung der JSONPath-Ausdrücke. Die JSONPath-Ausdrücke sind erstklassige Objekte, die leicht analysiert, transformiert, geparst, ausgegeben und erweitert werden können. Das Modul jsonpath-rw-ext bietet einige zusätzliche Erweiterungen, um seine Funktionen zu erweitern.
  3. jsonpath-ng: Die endgültige Implementierung des JSONPath, die darauf abzielt, die Anforderungen an die Standardkonformität zu erfüllen, einschließlich arithmetischer und binärer Vergleichsoperatoren. Diese Bibliothek kombiniert die Module jsonpath-rw und jsonpath-rw-ext und verbessert sie weiter.

Welche Python JSONPath-Bibliothek sollte verwendet werden?

Das jsonpath-ng Modul 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 Modul jsonpath-ng mit PIP installieren.

pip3.7 install jsonpath-ng

Python jsonpath-ng installieren

Ein einfaches JSON-Datenformat mit JSONPath parsen

Lassen Sie uns ein einfaches Beispiel ansehen, um die JSON-Daten zu analysieren und den benötigten 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)

Ausgabe:

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

Wir verwenden das json-Modul, um den JSON-String in ein Wörterbuch umzuwandeln.

Eine Liste mit JSONPath-Ausdrücken parsen

Der JSON-Schlüssel kann eine Liste von Werten enthalten. Wir können einen JSONPath-Ausdruck verwenden, um die Liste zu parsen und die Werte zu erhalten. Angenommen, 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}')

Ausgabe :

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

Empfohlene Lektüre: Python f-strings – PEP 498 – Literale Zeichenfolgeninterpolation

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

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

Schlussfolgerung

JSONPath bietet uns eine einfache Möglichkeit, die JSON-Daten zu analysieren und spezifische Werte zu extrahieren. Es ist sehr nützlich, wenn die JSON-Daten umfangreich sind und wir nur an wenigen Werten interessiert sind.

Referenzen

  • jsonpath.com: um die Gültigkeit des JSONPath-Ausdrucks zu testen
  • jsonlint.com: um JSON-Daten zu validieren