Jak przetworzyć łańcuch JSON do jsonnode w Jacksonie?
To powinno być takie proste, ale po prostu nie mogę go znaleźć po tym, jak próbuję przez godzinę # wstyd.
Muszę uzyskać łańcuch JSON, na przykład {"k1":v1,"k2":v2}
, parsowany jako JsonNode
.
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
Daje
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
5 answers
Lekka odmiana odpowiedzi Richardsa, ale readTree
może przyjmować ciąg znaków, więc można go uprościć do:
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-03 20:37:03
Musisz użyć ObjectMapper
:
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getJsonFactory(); // since 2.1 use mapper.getFactory() instead
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = mapper.readTree(jp);
Dalszą dokumentację dotyczącą tworzenia parserów można znaleźć tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-28 15:39:32
Trzeci wariant:
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readValue("{\"k1\":\"v1\"}", JsonNode.class);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-20 14:50:13
Odpowiedź Richarda jest prawidłowa. Alternatywnie możesz również utworzyć MappingJsonFactory
(w org.codehaus.jackson.map
), który wie, gdzie znaleźć ObjectMapper
. Błąd, który otrzymałeś, był spowodowany tym, że zwykły JsonFactory
(z core
pakietu) nie ma zależności od ObjectMapper
(który znajduje się w mapper
pakietu).
Ale zwykle po prostu używasz ObjectMapper
i nie martw się o JsonParser
lub inne komponenty niskiego poziomu-będą one po prostu potrzebne, jeśli chcesz powiązać dane z częściami strumienia lub obsługiwać niskopoziomowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-08 10:27:18
import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 23:01:22