Cela devrait être si simple, mais je ne le trouve pas après avoir essayé pendant une heure #embarrasing.
J'ai besoin d'obtenir une chaîne JSON, par exemple {"k1":v1,"k2":v2}
, analysée en tant que JsonNode
.
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
donne
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
#embarrasing
-- Nan. Si les choses simples ne sont pas simples, c'est le concepteur d'API qui a échoué, pas vous.Réponses:
Une légère variation sur la réponse de Richards mais
readTree
peut prendre une chaîne afin que vous puissiez la simplifier pour:la source
ObjectNode
d'uneJsonNode
utilisation plutôt que d'une utilisationmapper.valueToTree("{\"k1\":\"v1\"}")
Vous devez utiliser un
ObjectMapper
:Vous trouverez plus de documentation sur la création d'analyseurs syntaxiques ici .
la source
mapper.treeToValue()
,. MaisreadValue()
ça marche aussi.Une troisième variante:
la source
JsonNode
. Cependant, vous n'en voulez généralement pasJsonNode
, alors je voulais montrer comment dire à Jackson quel genre de valeur vous voulez.JsonNode
était apparemment nécessaire pour empêcher Jackson de le désérialiser comme autre chose - ce qui aurait échoué.La réponse de Richard est correcte. Alternativement, vous pouvez également créer un
MappingJsonFactory
(inorg.codehaus.jackson.map
) qui sait où trouverObjectMapper
. L'erreur que vous avez eue était parce que le régulierJsonFactory
(ducore
package) n'a aucune dépendance àObjectMapper
(qui est dans lemapper
package).Mais généralement, vous n'utilisez
ObjectMapper
et ne vous inquiétez pas pour d'JsonParser
autres composants de bas niveau - ils seront simplement nécessaires si vous souhaitez lier des parties de flux ou effectuer une manipulation de bas niveau.la source
la source
Nouvelle approche de l'ancienne question. Une solution qui fonctionne à partir de Java 9+
est plus lisible et plus facile à gérer pour les objets complexes. Ej
la source