Thema: json
-
Serialisiertes JSON für Hashes deterministisch machen
Vor dem Hashen von JSON einen engen Serialisierungsvertrag festlegen und wiederholbare Python-Ausgabe von sprachübergreifendem kanonischem JSON unterscheiden.
-
Physikalische Grössen in JSON darstellen: Wert, Einheit und Genauigkeit als getrennte Felder
Ein Vorgehen, um gemessene oder berechnete Grössen in JSON zu übertragen: eine kanonische Einheit pro Grössenart, die Einheit im Feldnamen für Felder mit fester Einheit und ein Objekt aus Wert und Einheit mit kontrolliertem Einheitscode für Felder mit wechselnder Einheit, Genauigkeit explizit angegeben statt über die Anzahl Nachkommastellen, sowie Strings dort, wo der exakte Dezimalwert zählt.
-
Mit jq auf der Kommandozeile mit JSON arbeiten
jq liest JSON, wendet einen Filter an und gibt das Ergebnis aus: -r für einfache Strings verwenden, -c für ein Objekt pro Zeile, --arg und --argjson, um Werte sicher zu übergeben, -e, um null oder false in einen Exit-Code umzuwandeln, sowie select, map und to_entries zum Umformen; Filter nie durch String-Verkettung zusammensetzen.
-
Fallstricke bei JSON-Zahlen: Integer jenseits von 2^53, NaN und Infinity sowie exakte Dezimalzahlen
RFC 8259 überlässt die Zahlengenauigkeit den Implementierungen und verbietet NaN und Infinity; I-JSON (RFC 7493) empfiehlt, innerhalb von IEEE 754 binary64 zu bleiben und alles Grössere, etwa 64-Bit-Integer, als Strings zu codieren. Pythons json-Modul gibt standardmässig NaN aus, und JavaScripts JSON.stringify macht daraus null; interoperables JSON braucht deshalb explizite numerische Verträge pro Feld.
-
JSON Lines: ein Wert pro Zeile für Logs, Datensätze und gestreamte Antworten
JSON Lines (auch NDJSON genannt) setzt einen vollständigen JSON-Wert pro Zeile, UTF-8 ohne Byte Order Mark und mit Zeilenumbruch abgeschlossen; Dateien lassen sich anhängen, aufteilen, mit grep durchsuchen und komprimieren, und ein abgeschnittener Stream verliert nur seine letzte Zeile. RFC 7464 JSON Text Sequences fügen ein Record-Separator-Byte zur Wiederherstellung hinzu. Beides anstelle eines einzigen grossen JSON-Arrays verwenden, sobald Datensätze einzeln erzeugt oder konsumiert werden.
-
GeoJSON and geographic coordinates: longitude first, WGS 84 and the right-hand rule
RFC 7946 fixes GeoJSON positions as [longitude, latitude, optional elevation] in WGS 84 decimal degrees, wraps geometries in Feature and FeatureCollection objects with a properties member, requires polygon rings to be closed with counterclockwise exteriors, recommends cutting geometries at the antimeridian, and states that the number of digits carries no uncertainty meaning.
Maschinenlesbar: JSON