Ich versuche so etwas zu machen, aber es funktioniert nicht:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Aber die IDE sagt:
Deaktivierte Zuordnung
Map to Map<String,String>
Was ist der richtige Weg, um dies zu tun? Ich verwende Jackson nur, weil dies bereits im Projekt verfügbar ist. Gibt es eine native Java-Methode zum Konvertieren in / von JSON?
In PHP würde ich einfach json_decode($str)
und ich würde ein Array zurückbekommen. Ich brauche hier im Grunde das Gleiche.
Antworten:
Ich habe folgenden Code:
Es liest aus einer Datei,
mapper.readValue()
akzeptiert aber auch eineInputStream
und Sie können eineInputStream
aus einer Zeichenfolge erhalten, indem Sie Folgendes verwenden:In meinem Blog gibt es ein bisschen mehr Erklärungen zum Mapper .
quelle
JsonFactory
wird nicht benötigt.ObjectMapper
kann es automatisch selbst erstellen.Map<String, String>
und du hast zur Verfügung gestelltMap<String, Object>
.mapper.writeValueAsString(hashmap)
Versuchen Sie es
TypeFactory
. Hier ist der Code für Jackson JSON (2.8.4).Hier ist der Code für eine ältere Version von Jackson JSON.
quelle
Die Warnung, die Sie erhalten, erfolgt durch den Compiler, nicht durch die Bibliothek (oder die Dienstprogrammmethode).
Der einfachste Weg, Jackson direkt zu verwenden, wäre:
Die von Ihnen aufgerufene Dienstprogrammmethode führt wahrscheinlich nur etwas Ähnliches aus.
quelle
Map<String, String>
und Sie haben zur Verfügung gestelltMap<String, Object>
.Beachten Sie, dass die
reader
Instanz Thread-sicher ist.quelle
Map<String, String>
und Sie haben zur Verfügung gestelltMap<String, Object>
.Konvertieren von String in JSON Map:
quelle
Type safety: The expression of type HashMap needs unchecked conversion to conform to Map<String,String>
. Während dies mit@SuppressWarnings
Anmerkungen unterdrückt werden kann , würde ich empfehlen,TypeReference
zuerst oder als nächstes Casting zu verwenden, wie von Staxmanmap = mapper.readValue(string, map.getClass());
- vorausgesetzt, Sie haben die Karte instanziiert, wie dies hier der Fall ist.Ich denke, das wird dein Problem lösen.
quelle
Folgendes funktioniert für mich:
wo
getJsonAsMap
ist so definiert:Beachten Sie, dass dies wird fehlschlagen , wenn Sie untergeordnete Objekte in Ihrem json haben (weil sie keine sind
String
, sind sie eine andereHashMap
), aber funktioniert , wenn Ihr json eine Schlüsselwert - Liste von Eigenschaften wie so ist:quelle
Verwenden von Google Gson
Warum nicht Googles Gson verwenden, wie hier erwähnt ?
Sehr unkompliziert und hat den Job für mich gemacht:
quelle
Hier ist die generische Lösung für dieses Problem.
Hoffe, eines Tages würde jemand darüber nachdenken, eine util-Methode zu erstellen, um sie in einen beliebigen Schlüssel- / Werttyp der Karte zu konvertieren, daher diese Antwort :)
quelle
Ich wollte nur eine Kotlin-Antwort geben
quelle