Как разбирать строку JSON в JsonNode в jacksonе?
Это должно быть так просто, но я просто не могу найти его, пробовав в течение часа #embarrasing.
Мне нужно получить строку JSON, например, {"k1":v1,"k2":v2}
, проанализированную как JsonNode
.
JsonFactory factory = new JsonFactory(); JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}"); JsonNode actualObj = jp.readValueAsTree();
дает
- Ошибка анализатора Antlr 4.5 во время выполнения
- Преобразование относительного пути в абсолютный URL с помощью PHP
- Прочтите файл .CSV в C
- Как разбирать данные JSON с помощью jQuery / JavaScript?
- Разбирайте строку так, как если бы она была запросом в Ruby on Rails
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
- Parse цитирует строки с boost :: spirit
- Разбор аргументов командной строки в сценариях R
- Более безопасная, но простая в использовании и гибкая альтернатива C ++ для s ++ ()
- Как форматировать DateTime в другом формате?
- Разбор строк запроса на Android
- Понимание синтаксического анализа строки Boost.spirit
- Проблема parsingа текста валюты на десятичный тип
- Эффективность анализа (если, TryParse, Try-Catch)
Небольшое отклонение от ответа Ричардса, но readTree
может взять строку, чтобы вы могли упростить ее:
ObjectMapper mapper = new ObjectMapper(); JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}");
Вам нужно использовать 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);
Дальнейшую документацию о создании парсеров можно найти здесь .
Третий вариант:
ObjectMapper mapper = new ObjectMapper(); JsonNode actualObj = mapper.readValue("{\"k1\":\"v1\"}", JsonNode.class);
Ответ Ричарда правильный. В качестве альтернативы вы также можете создать MappingJsonFactory
(в org.codehaus.jackson.map
), который знает, где найти ObjectMapper
. Вы получили ошибку, потому что обычный JsonFactory
(из core
пакета) не имеет отношения к ObjectMapper
(который находится в пакете mapper
).
Но обычно вы просто используете ObjectMapper
и не беспокоитесь о JsonParser
или других компонентах низкого уровня – они понадобятся только в том случае, если вы хотите привязать данные к части streamа или выполнить обработку на низком уровне.
import com.github.fge.jackson.JsonLoader; JsonLoader.fromString("{\"k1\":\"v1\"}") == JsonNode = {"k1":"v1"}