Wie konvertiere oder wandle ich eine Hashmap in ein JSON-Objekt in Java und konvertiere ein JSON-Objekt erneut in eine JSON-Zeichenfolge?
286
Sie können verwenden:
new JSONObject(map);
Achtung: Dies funktioniert nur für aMap<String, String>!
Weitere Funktionen finden Sie in der Dokumentation
http://stleary.github.io/JSON-java/index.html
Map
in ,JSONObject
aber wie kann man diese Karte von JSONObject bekommen?Gson kann auch verwendet werden, um beliebig komplexe Objekte zu serialisieren.
So verwenden Sie es:
Gson
konvertiert automatisch Sammlungen inJSON
Arrays. Gson kann private Felder serialisieren und transiente Felder automatisch ignorieren.quelle
Beispiel mit json
Ausgabe::
Sie können auch versuchen, Googles GSON zu verwenden. Googles GSON ist die beste verfügbare Bibliothek, um Java-Objekte in ihre JSON-Darstellung zu konvertieren.
http://code.google.com/p/google-gson/
quelle
2
in derjson.toString(
2`)Sie können konvertieren
Map
zuJSON
verwenden ,Jackson
wie folgt:Maven-Abhängigkeiten für
Jackson
:Wenn Sie eine
JSONObject
Bibliothek verwenden, können Sie die KarteJSON
wie folgt konvertieren :Maven-Abhängigkeiten für
JSONObject
:Hoffe das wird helfen. Viel Spaß beim Codieren.
quelle
In meinem Fall wollte ich keine Abhängigkeiten. Mit Java 8 können Sie JSON als Zeichenfolge so einfach erhalten:
quelle
"
, bricht diesSie können einfach die Map auflisten und die Schlüssel-Wert-Paare zum JSONObject hinzufügen
Methode :
quelle
Die Underscore-Java- Bibliothek kann die Hash-Map oder Array-Liste in JSON konvertieren und umgekehrt.
quelle
Spät zur Party, aber hier ist mein GSON- Ad-hoc-Autor für die Serialisierung von Hashmap. Ich musste eine Zuordnung von Schlüssel-Wert-Paaren als JSON-Zeichenfolgenattribute schreiben. Erwarten Sie, dass eine bestimmte Ganzzahl vom Typ ist. Ich wollte keinen benutzerdefinierten JavaBean-Wrapper für diesen einfachen Anwendungsfall erstellen.
Die GSON JsonWriter-Klasse ist eine einfach zu verwendende Serializer-Klasse, die nur wenige stark typisierte writer.value () -Funktionen enthält.
Wenn keiner der benutzerdefinierten Typen benötigt wird, hätte ich einfach die Funktion toJson () verwenden können. Die gson-2.2.4.jar-Bibliothek ist knapp 190 KB groß und weist keine brutalen Abhängigkeiten auf. Einfache Verwendung in jeder benutzerdefinierten Servlet-App oder eigenständigen Anwendung ohne große Framework-Integrationen.
quelle
Dies ist normalerweise die Arbeit einer Json-Bibliothek. Sie sollten nicht versuchen, dies selbst zu tun. Alle JSON-Bibliotheken sollten das implementieren, wonach Sie fragen. Eine Liste der Java-Json-Bibliotheken finden Sie auf json.org am Ende der Seite.
quelle
Ich habe einen anderen Weg gefunden, damit umzugehen.
Hoffe das hilft.
Vielen Dank.
quelle
Wenn Sie es brauchen, verwenden Sie es im Code.
quelle
Für diejenigen
org.json.simple.JSONObject
, die verwenden , können Sie die Map in Json String konvertieren und analysieren, um die zu erhaltenJSONObject
.quelle
Komm lieber zu spät als nie. Ich habe GSON verwendet , um die Liste von HashMap in einen String zu konvertieren, falls Sie eine serialisierte Liste haben möchten.
Dies
json
erzeugt[{"key":"value","key":"value","key":"value"}]
quelle
Gson
.Hier meine einzeilige Lösung mit GSON:
quelle
Diese Lösung funktioniert mit komplexen JSONs:
quelle
Wir benutzen Gson.
quelle
Sie können XStream verwenden - es ist wirklich praktisch. Siehe die Beispiele hier
quelle
Wenn Sie verwenden, finden
net.sf.json.JSONObject
Sie keinenJSONObject(map)
Konstruktor darin. Sie müssen diepublic static JSONObject fromObject( Object object )
Methode verwenden. Diese Methode akzeptiert JSON-formatierte Zeichenfolgen, Maps, DynaBeans und JavaBeans.JSONObject jsonObject = JSONObject.fromObject(myMap);
quelle
Wenn Sie komplexe Objekte verwenden, sollten Sie enableComplexMapKeySerialization () anwenden , wie unter https://stackoverflow.com/a/24635655/2914140 und https://stackoverflow.com/a/26374888/2914140 angegeben .
Ausgabe wird sein:
quelle
Keine Notwendigkeit für Gson- oder JSON-Parsing-Bibliotheken. Nur mit
new JSONObject(Map<String, JSONObject>).toString()
, zB:quelle
quelle
Wenn Sie HashMap nicht wirklich benötigen, können Sie Folgendes tun:
Ausgabe:
quelle
HashMap
zu erstellen. Dies beantwortet dies nicht.Ich benutze Alibaba fastjson, leicht und einfach:
und importieren:
Dann:
Alles ist ok.
quelle
Wenn Sie JSR 374 verwenden: Java-API für die JSON-Verarbeitung (javax json) Dies scheint den Trick zu tun:
quelle
Sie können Gson verwenden . Diese Bibliothek bietet einfache Methoden zum Konvertieren von Java-Objekten in JSON-Objekte und umgekehrt.
Beispiel:
Sie können einen GsonBuilder verwenden, wenn Sie andere als die Standardkonfigurationsoptionen festlegen müssen. Im obigen Beispiel serialisiert der Konvertierungsprozess auch Nullattribute aus dem Objekt.
Dieser Ansatz funktioniert jedoch nur für nicht generische Typen. Für generische Typen müssen Sie toJson (Objekt, Typ) verwenden.
Weitere Informationen zu Gson hier .
Denken Sie daran, dass das Objekt die serialisierbare Schnittstelle implementieren muss .
quelle
das funktioniert bei mir:
quelle
Gson Weg für etwas komplexere Karten und Listen mit der TypeToken.getParameterized- Methode:
Wir haben eine Karte, die so aussieht:
Wir erhalten den Typ mit der oben genannten Methode getParameterized wie folgt :
Verwenden Sie dann die Methode Gson object fromJson wie folgt , indem Sie das Objekt mapOfList wie folgt verwenden :
Das erwähnte Objekt NewFile sieht folgendermaßen aus:
Der deserialisierte JSON sieht folgendermaßen aus:
quelle
Ich hatte ein ähnliches Problem beim Deserialisieren der Antwort von benutzerdefinierten Befehlen in Selen. Die Antwort war json, aber Selen übersetzt dies intern in eine java.util.HashMap [String, Object]
Wenn Sie mit Scala vertraut sind und die Play-API für JSON verwenden, können Sie davon profitieren:
Kleine Codebeschreibung:
Der Code durchläuft rekursiv die HashMap, bis Basistypen (String, Integer, Boolean) gefunden werden. Diese Grundtypen können direkt in ein JsObject eingeschlossen werden. Wenn die Rekursion entfaltet wird, verkettet der Deepmerge die erstellten Objekte.
'@unchecked' kümmert sich um Löschwarnungen.
quelle
Konvertieren Sie zuerst alle Ihre Objekte in gültige Zeichenfolgen
Fügen Sie dann die gesamte Map in ein org.json.JSONObject ein
Jetzt können Sie den JSON erhalten, indem Sie einfach den toString des Objekts aufrufen
Erstellen Sie ein neues JSONObject
Oder als Byte-Array zum Senden über HTTP
quelle