JSON

Überblick

Unterstützung von Datenstrukturen

+-

JSON unterstützt Array- und Map- oder Objectstrukturen vieler verschiedener Datentypen einschließlich Zeichenfolgen, Zahlen, Boolesche Werte, Null usw., aber keine Datumsformate.

Jedoch unterstützt JSON auch nicht alle Datentypen von JavaScript: NaN und Infinity werden zu null.

Beachtet auch, dass die JSON keine Kommentare unterstützt und ihr gegebenenfalls darum herumarbeiten müsst, z.B. mit einem __comment__ Schlüssel/Wert-Paar.

Standardisierung

+

JSON hat einen formal streng typisierten Standard siehe auch RFC 8259). Jedoch enthalten JSON-Daten auch einige Fallstricke aufgrund der Mehrdeutigkeit der JSON-Specifikationen:

Ein JSON-Parser MUSS alle Texte akzeptieren, die der JSON-Grammatik entsprechen (RFC 7159).

und

Eine Implementierung kann Grenzen für die Größe der akzeptierten Texte setzen. Eine Implementierung kann Grenzen für die maximale Verschachtelungstiefe festlegen. Eine Implementierung kann Grenzen für den Bereich und die Genauigkeit von Zahlen festlegen. Eine Implementierung kann Grenzen für die Länge und den Zeicheninhalt von Zeichenketten festlegen (RFC 7158 Section 9).

Unglücklicherweise gibt es weder eine Referenzimplementierung noch eine offizielle Testsuite, die das erwartete Verhalten zeigen würden – immerhin gibt zumindest JSON_Checker einige Hinweise.

Schema IDL

+-

Zum Teil mit JSON Schema Proposal, JSON Encoding Rules (JER), Kwalify, Rx, JSON-LD oder JMESPath.

Immerhin gibt es viele verschiedene Validatoren.

Sprachunterstützung

++

Das JSON-Format wird sehr gut von den meisten Programmiersprachen unterstützt.

Die Datenstrukturen von JSON sind nahe an den Objekten der meisten Sprachen, z.B. kann ein Python dict einfach als JSON-object und eine Python list einfach als JSON-array dargestellt werden.

Menschliche Lesbarkeit

+-

JSON ist ein menschlich lesbares Serialisierungsformat, aber es unterstützt keine Kommentare.

Geschwindigkeit

++

JSON ist eines der menschlich lesbaren Serialisierungsformate, die schnell zu serialisieren und zu deserialisieren sind.

Dateigröße

+-

Die Dateigröße von JSON liegt im Mittelfeld, ähnlich YAML und TOML.

Beispiel

Antwort der OSM-Nominatim-API:

[
    {
        'place_id': 234847916,
        'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
        'osm_type': 'relation',
        'osm_id': 131761,
        'boundingbox': ['52.5200695', '52.5232601', '13.4103097', '13.4160798'],
        'lat': '52.521670650000004',
        'lon': '13.413278026558228',
        'display_name': 'Alexanderplatz, Mitte, Berlin, 10178, Deutschland',
        'class': 'highway',
        'type': 'pedestrian',
        'importance': 0.6914982526373583
    },
    {
        'place_id': 53256307,
        'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
        'osm_type': 'node',
        'osm_id': 4389211800,
        'boundingbox': ['52.5231653', '52.5232653', '13.414475', '13.414575'],
        'lat': '52.5232153',
        'lon': '13.414525',
        'display_name': 'Alexanderplatz, Alexanderstraße, Mitte, Berlin, 10178, Deutschland',
        'class': 'highway',
        'type': 'bus_stop',
        'importance': 0.22100000000000003,
        'icon': 'https://nominatim.openstreetmap.org/images/mapicons/transport_bus_stop2.p.20.png'
    },
    {
        'place_id': 90037579,
        'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
        'osm_type': 'way',
        'osm_id': 23853138,
        'boundingbox': ['52.5214702', '52.5217276', '13.4037885', '13.4045026'],
        'lat': '52.5215991',
        'lon': '13.404112295159964',
        'display_name': 'Alexander Plaza, 1, Rosenstraße, Mitte, Berlin, 10178, Deutschland',
        'class': 'tourism',
        'type': 'hotel',
        'importance': 0.11100000000000002,
        'icon': 'https://nominatim.openstreetmap.org/images/mapicons/accommodation_hotel2.p.20.png'
    }
]

JSON-Tools

fx

macht JSON durchsuchbar. Dies erleichtert v.a. die Erkundung von APIs, die große JSON-Blöcke zurückgeben, aber schlecht dokumentiert sind.

Stars Contributors Commit activity Lizenz
gron

Terminal JSON viewer & processor

Stars Contributors Commit activity Lizenz
JC – JSON Convert

ist ein CLI-Tool und eine Python-Bibliothek, die die Ausgabe gängiger Befehlszeilentools, Dateitypen und Zeichenfolgen in JSON, YAML oder Dictionaries konvertiert; dies ermöglicht die Weiterleitung der Ausgabe an Tools wie jq und vereinfacht Automatisierungsskripte.

Stars Contributors Commit activity Lizenz
UltraJSON

ist ein schneller JSON-Encoder und -Decoder, der in reinem C geschrieben ist und Bindings für Python≥3.9 bietet.

Stars Contributors Commit activity Lizenz
simplejson

ist ein einfacher, schneller und erweiterbarer JSON-Encoder/Decoder für Python.

Stars Contributors Commit activity Lizenz
python-json-patch

ist eine Python-Bibliothek für JSON-Patches gemäß RFC 6902.

Stars Contributors Commit activity Lizenz
jsonata-python

JSONata ist eine leichtgewichtige Abfrage- und Transformationssprache für JSON-Daten, inspiriert von XPath.

Stars Contributors Commit activity Lizenz