Es sollte so einfach sein, aber ich kann es einfach nicht finden, nachdem ich es eine Stunde lang versucht habe #embarrasing.
Ich muss eine JSON-Zeichenfolge abrufen, die beispielsweise {"k1":v1,"k2":v2}
als analysiert wird JsonNode
.
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
gibt
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
#embarrasing
- Nein. Wenn einfache Dinge nicht einfach sind, ist der API-Designer gescheitert, nicht Sie.Antworten:
Eine geringfügige Abweichung von Richards Antwort,
readTree
die jedoch eine Zeichenfolge enthalten kann, um sie zu vereinfachen:quelle
ObjectNode
eher eine als eineJsonNode
Verwendung benötigenmapper.valueToTree("{\"k1\":\"v1\"}")
Sie müssen Folgendes verwenden
ObjectMapper
:Weitere Dokumentationen zum Erstellen von Parsern finden Sie hier .
quelle
mapper.treeToValue()
. Funktioniert aberreadValue()
auch.Eine dritte Variante:
quelle
JsonNode
. Normalerweise willst du jedoch keineJsonNode
, also wollte ich zeigen, wie man Jackson sagt, welchen Wert du haben willst.JsonNode
anscheinend notwendig, um Jackson daran zu hindern, es als etwas anderes zu deserialisieren - was gescheitert wäre.Richards Antwort ist richtig. Alternativ können Sie auch ein
MappingJsonFactory
(inorg.codehaus.jackson.map
) erstellen, das weiß, wo es zu finden istObjectMapper
. Der Fehler, den Sie erhalten haben, war, dass der reguläreJsonFactory
(vomcore
Paket) keine Abhängigkeit vonObjectMapper
(der immapper
Paket enthalten ist) hat.Normalerweise verwenden Sie jedoch nur Komponenten auf niedriger Ebene
ObjectMapper
und machen sich keine Sorgen darüberJsonParser
. Sie werden nur benötigt, wenn Sie Teile des Streams datenbinden oder auf niedriger Ebene verarbeiten möchten.quelle
quelle