Ich denke an etwas wie:
String json = new JsonBuilder()
.add("key1", "value1")
.add("key2", "value2")
.add("key3", new JsonBuilder()
.add("innerKey1", "value3"))
.toJson();
Welche Java JSON-Bibliothek eignet sich am besten für diese Art von fließendem Erstellen?
Update : Ich habe GSON verpackt und fast das gewünschte Ergebnis erzielt ... mit einem Problem .
Antworten:
Ich benutze die Bibliothek org.json und fand sie nett und freundlich.
Beispiel:
AUSGABE:
quelle
Siehe die Java EE 7 Json-Spezifikation . Das ist der richtige Weg:
quelle
javax.json
Java 7 und höher ist.javax.json
Paket ist diesesIch habe kürzlich eine Bibliothek zum fließenden Erstellen von Gson-Objekten erstellt:
http://jglue.org/fluent-json/
Es funktioniert so:
Und durch die Magie der Generika werden Kompilierungsfehler generiert, wenn Sie versuchen, einem Array mit einem Eigenschaftsschlüssel ein Element oder einem Objekt ohne Eigenschaftsnamen ein Element hinzuzufügen:
Schließlich gibt es in der API Unterstützung für die Zuordnung, mit der Sie Ihre Domänenobjekte JSON zuordnen können. Das Ziel ist, dass Sie mit der Veröffentlichung von Java8 Folgendes tun können:
quelle
Wenn Sie mit Jackson viel
JsonNode
Code einbauen, sind Sie möglicherweise an den folgenden Dienstprogrammen interessiert. Der Vorteil ihrer Verwendung besteht darin, dass sie einen natürlicheren Verkettungsstil unterstützen, der die Struktur des im Bau befindlichen JSON besser zeigt.Hier ist ein Anwendungsbeispiel:
Welches entspricht dem folgenden JSON:
Hier sind die Klassen:
Beachten Sie, dass die Implementierung Lombok verwendet , Sie es jedoch problemlos deaktivieren können, um das Java-Boilerplate auszufüllen.
quelle
Wenn Sie der Meinung sind, dass die oben genannte Lösung elegant ist, probieren Sie bitte meine JsonBuilder-Bibliothek aus . Es wurde erstellt, um eine Möglichkeit zum Erstellen von Json-Strukturen für viele Arten von Json-Bibliotheken zu ermöglichen. Aktuelle Implementierungen umfassen Gson, Jackson und MongoDB. Für dh. Jackson tauscht einfach:
Gerne füge ich auf Anfrage weitere hinzu, es ist auch ganz einfach, eine selbst zu implementieren.
quelle
Es hört sich so an, als ob Sie wahrscheinlich json-lib kennenlernen möchten:
http://json-lib.sourceforge.net/
Douglas Crockford ist der Typ, der JSON erfunden hat; seine Java-Bibliothek ist hier:
http://www.json.org/java/
Es hört sich so an, als hätten die Leute von json-lib dort angefangen, wo Crockford aufgehört hat. Beide unterstützen JSON vollständig, beide verwenden (soweit ich das beurteilen kann) JSONObject-, JSONArray- und JSONFunction-Konstrukte (kompatibel).
'Hoffentlich hilft das ..
quelle
Die Referenzimplementierung enthält eine fließende Schnittstelle. Schauen Sie sich JSONWriter und seine toString-implementierende Unterklasse JSONStringer an
quelle
Es ist viel einfacher als Sie denken, Ihre eigenen zu schreiben. Verwenden Sie einfach eine Schnittstelle für
JsonElementInterface
eine Methodestring toJson()
und eine abstrakte Klasse,AbstractJsonElement
die diese Schnittstelle implementiert.Dann müssen Sie nur noch eine Klasse haben
JSONProperty
, die die Schnittstelle implementiert, undJSONValue
(jedes Token),JSONArray
([...]) undJSONObject
({...}), die die abstrakte Klasse erweiternJSONObject
hat eine Liste vonJSONProperty
'sJSONArray
hat eine Liste vonAbstractJsonElement
' sIhre Add-Funktion in jedem sollte eine Vararg-Liste dieses Typs verwenden und zurückgeben
this
Wenn Sie etwas nicht mögen, können Sie es einfach optimieren
Der Vorteil der Schnittstelle und der abstrakten Klasse besteht darin, dass
JSONArray
sie keine Eigenschaften akzeptieren können, aberJSONProperty
Objekte oder Arrays akzeptieren könnenquelle