JSON-Parser / Generator zu / von Clojure-Datenstrukturen.
Zentrale Ziele:
- Konform mit JSON-Spezifikation per https://json.org/
- Keine externen Abhängigkeiten
Releases und Abhängigkeitsinformationen
Dieses Projekt folgt dem Versionsschema MAJOR.KLEINERE.PATCH, bei dem jede Komponente einen relativen Hinweis auf die Größe der Änderung liefert, aber nicht der semantischen Versionierung folgt. Im Allgemeinen bemühen sich alle Änderungen, nicht zu brechen (indem Sie zu neuen Namen wechseln, anstatt vorhandene Namen zu brechen).
Neueste stabile Version ist 2.0.1
CLI / deps.edn
Abhängigkeitsinformationen:
org.clojure/data.json {:mvn/version "2.0.1"}
Leiningen dependency information:
Maven Abhängigkeitsinformationen:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
Andere Versionen:
-
Alle veröffentlichten Versionen
-
Entwicklungs-Snapshots
-
Entwicklung Snapshot Repositories
Verwendung
API-Dokumentation
Beispielverwendung:
(ns example (:require ))
Um in/aus JSON-Strings zu konvertieren, verwenden Sie json/write-str
und json/read-str
:
(json/write-str {:a 1 :b 2});;=> "{\"a\":1,\"b\":2}"(json/read-str "{\"a\":1,\"b\":2}");;=> {"a" 1, "b" 2}
Beachten Sie, dass diese Vorgänge nicht symmetrisch sind: Das Konvertieren von Clojure-Daten in JSON ist verlustbehaftet.
Konvertieren von Schlüssel- / Werttypen
Sie können eine :key-fn
angeben, um Kartenschlüssel auf dem Weg nach innen oder außen zu konvertieren:
(json/read-str "{\"a\":1,\"b\":2}" :key-fn keyword);;=> {:a 1, :b 2}(json/write-str {:a 1 :b 2} :key-fn #(.toUpperCase %));;=> "{\"A\":1,\"B\":2}"(json/read-str "{\"a\":1,\"b\":2}" :key-fn #(keyword "com.example" %));;=> {:com.example/a 1, :com.example/b 2}
Sie können a :value-fn
angeben, um Kartenwerte auf dem Weg nach orout zu konvertieren. Der Wert-fn wird mit zwei Argumenten, dem Schlüssel und dem Wert, aufgerufen und gibt den aktualisierten Wert zurück.
(defn my-value-reader (if (= key :date) (java.sql.Date/valueOf value) value))(json/read-str "{\"number\":42,\"date\":\"2012-06-02\"}" :value-fn my-value-reader :key-fn keyword) ;;=> {:number 42, :date #inst "2012-06-02T04:00:00.000-00:00"}
Beachten Sie, dass :value-fn
nur auf Karten (JSON-Objekten) funktioniert. Wenn es sich bei Ihrer Stammdatenstruktur beispielsweise um einen Datumsvektor handelt, müssen Sie ihn außerhalb von Daten vor- oder nachverarbeiten.json. clojure.spaziergang kann dafür nützlich sein.
Reihenfolge von Schlüssel-fn / Wert-fn
Wenn Sie beim Lesen sowohl a :key-fn
als auch a :value-fn
angeben, wird der Wert-fn aufgerufen, nachdem der Schlüssel von thekey-fn verarbeitet wurde.
Beim Schreiben ist das Gegenteil der Fall:
(defn my-value-writer (if (= key :date) (str (java.sql.Date. (.getTime value))) value))(json/write-str {:number 42, :date (java.util.Date. 112 5 2)} :value-fn my-value-writer :key-fn name) ;;=> "{\"number\":42,\"date\":\"2012-06-02\"}"
Lesen / Schreiben eines Streams
Sie können JSON auch direkt von einem java.io.Reader mit json/read
lesen und JSON direkt in einen java.io.Writer mit json/write
schreiben.
Mehr
Andere optionen sind verfügbar. Einzelheiten finden Sie in der API-Dokumentation.
Entwicklerinformationen
- GitHub-Projekt
- Beitrag leisten
- Bug Tracker
- Kontinuierliche Integration
- Kompatibilitätstestmatrix
Änderungsprotokoll
- Release 2.0.1 am 19. März 2021
- Fix DJSON-37: Fix Off-by-One-Fehler beim Lesen langer Strings, Regression in 2.0.0
- Release 2.0.0 am 19.März 2021
- Perf DJSON-35: Ersetzen Sie PrintWriter durch generischeres Appendable, reduzieren Sie das Wrapping
- Perf DJSON-34: Effizienteres Schreiben für Common path
- Perf DJSON-32: Verwenden Sie die Option Map anstelle von dynamischen Variablen (betrifft Lesen + Schreiben)
- Perf DJSON-33: Verbessern Sie die Geschwindigkeit beim Lesen von JSON-Strings
- Fix DJSON-30: Fix
- Release 1.1.0 am 5. März 2021
- Fix DJSON-26: write-object sollte seq auf loop var überprüfen, nicht param
- Verwenden Sie das neueste übergeordnete Pom (wird standardmäßig clojure dep auf 1.8 setzen.0)
- Direkte Verknüpfung mit der Klassifikatorbibliothek „aot“ verwenden
- Release 1.0.0 am 18. Februar 2020
- Release 0.2.7 am 18. November 2019
- Fix DJSON-29: Ausnahme bei fehlenden Objekteinträgen auslösen (zusätzliche Kommas)
- Release 0.2.6 am 6. März 2015
- Ändern Sie build, um ein AOT-Paket mit dem Klassifikator „aot“ zu erstellen“
- Release 0.2.5 am 13. Juni 2014
- Fix DJSON-17: Ausnahme bei unendlichen oder NaN-Gleitkommawerten auslösen. Altes Verhalten könnte ungültiges JSON erzeugen.
- Veröffentlichung 0.2.4 am 10. Januar 2014
- Kleine Verhaltensänderung:
clojure.data.json/pprint
fügt jetzt eine neue Zeile nach der Ausgabe hinzu, genau wieclojure.core/pprint
- Fix DJSON-13: Flush-Ausgabe nach pprint
- Fix DJSON-14: Handle EOF innerhalb des Zeichens escape
- Fix DJSON-15: Fehlerhafte Syntax im Test
- Kleine Verhaltensänderung:
- Release 0.2.3 am 30. August 2013
- Verbesserung DJSON-9: Option zum Escapen von U + 2028 und U+2029
- Fix DJSON-11: Drucken unnötiger Kommas mit dem Wert-fn
- Release 0.2.2 auf 2013-Apr-07
- Fix DJSON-7: zusätzliche Kommas beim Entfernen von Schlüssel / Wert-Paaren)
- Fix DJSON-8: falscher Ausgabestream in
write-json
- Release 0.2.1 am 26. Oktober 2012
- Stellt die Abwärtskompatibilität mit 0.1 wieder her.x veröffentlicht. Der Ältere0.1.x-APIs sind in ihrer Dokumentation als veraltet gekennzeichnet. Sie werden in einer zukünftigen Version entfernt.
- Release 0.2.0 auf 2012-Oct-12
- Nicht für den Einsatz empfohlen: Diese Version eingeführt brechen APIchanges (Umbenennen Kernfunktionen) ohne Pfad forbackwards-Kompatibilität. Anwendungen mit transitiven Abhängigkeitenauf beiden 0.2.x und 0.1.x-APIs können diese Version nicht verwenden.
- Neu: key-fn und :value-fn erlauben flexible Transformation von Werten beim Lesen von & Schreiben von JSON
- Unterstützung für das Lesen großer Ganzzahlen als BigInt
- Optionale Unterstützung für das Lesen von Dezimalzahlen als BigDecimal
- Leistungsverbesserungen
- Release 0.1.3 am 09. März 2012
- Fix Schreiben von Zeichenfolgen mit Zeichen außerhalb des BMP
- Release 0.1.2 auf 2011-Oct-14
- Bessere Analyse von hexadezimalen Zeichen Escapes
- Fix EOF-Handling Bug
- Fix DJSON-1: reflexionswarnungen
- Release 0.1.1 vom 01. Juli 2011
- Stellen Sie sicher, dass beim Drucken auf
*out*
immer ein PrintWriter verwendet wird.
- Stellen Sie sicher, dass beim Drucken auf
- Release 0.1.0 auf 2011-Mar-18
- Erstveröffentlichung.
- Quellcode-kompatibel mit Clojure.contrib.json, mit Ausnahme der Namensänderung.
Copyright und Lizenz
Copyright (c) Stuart Sierra, Rich Hickey und contriburos 2012-2020.Alle Rechte vorbehalten. Die Nutzungs- und Vertriebsbedingungen für diese Software unterliegen der Eclipse PublicLicense 1.0 (https://opensource.org/licenses/eclipse-1.0.php), die in der Datei epl-v10 zu finden ist.html an der Wurzel dieses distribution.By wenn Sie diese Software in irgendeiner Weise verwenden, erklären Sie sich damit einverstanden, an die Bedingungen dieser Lizenz gebunden zu sein. Sie dürfen diesen oder einen anderen Hinweis nicht aus dieser Software entfernen.