Dies mag etwas ungewöhnlich erscheinen, aber ich suche nach einem effizienten Weg, um a JsonNode
in a umzuwandeln / abzubilden POJO
.
Ich speichere einige Informationen meines Modells in JSON-Dateien und muss einige Versionen meines Modells unterstützen.
Ich lade die JSON-Datei in den Speicher eines JsonNode und wende einige Versionsstrategien an, damit sie mit der neuesten Version meines Modells übereinstimmt.
ObjectMapper mapper = new ObjectMapper();
BufferedReader fileReader = new BufferedReader(new FileReader(projPath));
JsonNode rootNode = mapper.readTree(fileReader);
//Upgrade our file in memory
applyVersioningStrategy(rootNode);
ProjectModel project = mapJsonNodeToProject(rootNode);
Wenn es keinen schnelleren Weg gibt, werde ich das wahrscheinlich einfach manuell JsonNodes
auf mein Modell anwenden
jsonObjectMapper.readValue(jsonObjectMapper.treeAsTokens(someJsonNode), someTypeReference)
objectMapper.treeToValue(jsonNode, MyClass.class)
p.codec.treeToValue
.Dies sollte den Trick tun:
Ich sage sollte, weil ich das mit einem benutze, nicht mit einem
String
,BufferedReader
aber es sollte trotzdem funktionieren.Hier ist mein Code:
Hier ist die offizielle Dokumentation für diesen Aufruf: http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class)
Sie können auch einen benutzerdefinierten Deserializer definieren, wenn Sie Folgendes instanziieren
ObjectMapper
: http://wiki.fasterxml.com/JacksonHowToCustomDeserializersEdit: Ich habe mich gerade an etwas anderes erinnert. Wenn Ihr eingehendes Objekt mehr Eigenschaften als das
POJO
hat und Sie nur die Extras ignorieren möchten, möchten Sie Folgendes festlegen:Oder Sie erhalten eine Fehlermeldung, dass die zu setzende Eigenschaft nicht gefunden werden kann.
quelle
Wenn Sie org.codehaus.jackson verwenden, ist dies seit 1.6 möglich. Sie können einen JsonNode in einen POJO konvertieren mit
ObjectMapper#readValue
: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode , java. lang.Class)quelle
Wenn Ihre JSON-Eingabe in mehr Eigenschaften als Ihre POJO hat und Sie die Extras in Jackson 2.4 einfach ignorieren möchten, können Sie Ihren ObjectMapper wie folgt konfigurieren. Diese Syntax unterscheidet sich von älteren Jackson-Versionen. (Wenn Sie die falsche Syntax verwenden, wird im Stillen nichts unternommen.)
quelle