- JSON Path ist eine Abfragesprache, mit der sich Daten aus JSON-Dokumenten extrahieren lassen
- Da OpenAPI ein JSON- oder YAML-Dokument ist, kann man mit JSON Path in OpenAPI verschiedene Aufgaben erledigen
- Mit OpenAPI Overlay zusätzliche Inhalte, Codebeispiele usw. in Dokumente patchen
- In Spectral für die Erstellung fortgeschrittener Regeln nutzbar
- Auch in AWS Step Functions verwendbar
- So funktioniert JSON Path
- Es durchsucht und filtert JSON-Datenstrukturen und extrahiert bestimmte Teile
- Ähnliche Syntax wie XPath (verwendet bei XML)
- Syntaxbeispiel:
$.store.book[?@.price < 10].title
- Einsatz in OpenAPI
- Mit dem Befehl
jpp lassen sich OpenAPI-Dokumente abfragen und bestimmte Teile extrahieren
- Mit Overlay kann man OpenAPI-Dokumente ändern oder Informationen hinzufügen
- Beschreibungen aktualisieren, Kontaktinformationen ergänzen usw.
- Entwicklungs-/Staging-Server aus der Serverliste entfernen und nur Produktion übrig lassen
- Informationen zu einem neuen Sandbox-Server hinzufügen usw.
- Mehr über JSON Path lernen
- 2024 von der IETF als Standard verabschiedet (RFC 9535)
- Zuvor gab es mehrere Varianten, doch durch die Standardisierung zeichnet sich eine Vereinheitlichung ab
- Es ist empfehlenswert, sich an die Syntax von RFC 9535 zu halten
Meinung von GN⁺
- JSON Path wird an immer mehr Stellen eingesetzt und ist daher eine nützliche Technik, die man kennen sollte. Besonders für Entwickler oder technische Redakteure, die mit OpenAPI arbeiten, dürfte es zu einer unverzichtbaren Fähigkeit werden.
- Die Syntax von JSON Path ist noch nicht überall vollständig vereinheitlicht, was etwas Verwirrung stiften kann, aber RFC 9535 als Referenz zu verwenden, erscheint sinnvoll. Es ist zu erwarten, dass sich auch die zugehörigen Tools künftig an diesem Standard orientieren.
- Es scheint viele Einsatzmöglichkeiten im Entwicklungsprozess zu geben, etwa mit OpenAPI Overlay oder Spectral. Nicht nur für die reine Datenextraktion, sondern auch für Dokumentenergänzung, Validierung und Bereinigung dürfte das Potenzial groß sein.
- Allerdings ist die Syntax etwas komplex, und man sollte mit JSON/YAML vertraut sein, daher gibt es eine gewisse Einstiegshürde. Am besten beginnt man einfach und arbeitet sich schrittweise zu fortgeschritteneren Funktionen vor.
- Zum Üben eignen sich Kommandozeilen-Tools wie
jq oder yq. Auch die Nutzung integrierter Tools wie Bump.sh kann die Produktivität verbessern.
2 Kommentare
Danke.
Hacker-News-Kommentare
JSONata(https://jsonata.org) ist eines der besten Tools zur JSON-Manipulation, verwendet eine JsonPath-Syntax und bietet neben der Knotenauswahl auch Hilfsfunktionen für Arithmetik, Vergleiche, Sortierung, Gruppierung, Datumsmanipulation und Aggregation. Es ist in JS geschrieben und kann in Node oder im Browser verwendet werden; außerdem gibt es einen Python-Wrapper (https://pypi.org/project/pyjsonata/).
json_profile(https://github.com/tylerneylon/json_profile) ist ein Tool, das dabei hilft, das Hauptschema und die Datenpositionen neuer JSON-Dateien schnell zu verstehen, und ist nützlich, wenn gleichrangige Elemente in Listen dieselbe Struktur haben. Es lernt die Dateistruktur, gibt die gewichtigsten Aggregationspfade aus und liefert Größenhinweise pro Pfad.
espath(https://github.com/tomhodgins/espath) ist eine Bibliothek, die XPath- und CSS-Selektoren verwendet, um Daten in JSON zu filtern und zu finden. Sie funktioniert, indem sie JavaScript-Objekte in ein XML-DOM umwandelt, Abfragen ausführt und sie dann wieder in Objekte zurückverwandelt, oder indem sie das ursprüngliche Objektreferenzregister beibehält und die Originalobjekte durchsucht.
Es gibt die Frage, ob es einen allgemeinen Namen für die von JSON dargestellte Datenstruktur gibt, sowie den Hinweis auf die Notwendigkeit einer Pfadsprache, die mit ähnlichen Strukturen wie JSON, YAML, Python-Dictionaries, TOML usw. arbeitet.
SQLite enthält eine Teilmenge von JSON Path im Kern der Datenbank, die in Funktionen wie json_extract() verwendet wird. Zugehörige Detailnotiz: https://til.simonwillison.net/sqlite/json-extract-path
Insomnia und Bruno bieten Funktionen, um Antworten mit JSON Path zu filtern.
Es wurde verwendet, um mit der jsonpath-Unterstützung von PostgreSQL benutzerdefinierte Filterregeln für DB-Zeilen zu erstellen.
So wie XPath-Injection weit verbreitet war, werden JSON-Path-Injection-Angriffe voraussichtlich unvermeidlich sein. (Siehe https://owasp.org/www-community/attacks/XPATH_Injection)
Es ist verwunderlich, dass es keine Erwähnung ähnlicher Tools wie jq gibt.
Schade, dass es so viele JSON-Pfad-Syntaxen gibt. jq, JSON Path, AWS CLI, MySQL usw. verwenden jeweils unterschiedliche Syntaxen, sodass es schwer ist, ein Muskelgedächtnis dafür zu entwickeln.