Как разбирать строку JSON в JsonNode в jacksonе?

Это должно быть так просто, но я просто не могу найти его, пробовав в течение часа #embarrasing.

Мне нужно получить строку JSON, например, {"k1":v1,"k2":v2} , проанализированную как JsonNode .

 JsonFactory factory = new JsonFactory(); JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}"); JsonNode actualObj = jp.readValueAsTree(); 

дает

java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree

Небольшое отклонение от ответа Ричардса, но 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); 

Ответ Ричарда правильный. В качестве альтернативы вы также можете создать MappingJsonFactoryorg.codehaus.jackson.map ), который знает, где найти ObjectMapper . Вы получили ошибку, потому что обычный JsonFactory (из core пакета) не имеет отношения к ObjectMapper (который находится в пакете mapper ).

Но обычно вы просто используете ObjectMapper и не беспокоитесь о JsonParser или других компонентах низкого уровня – они понадобятся только в том случае, если вы хотите привязать данные к части streamа или выполнить обработку на низком уровне.

 import com.github.fge.jackson.JsonLoader; JsonLoader.fromString("{\"k1\":\"v1\"}") == JsonNode = {"k1":"v1"} 
  • Что такое эквивалент C # для NaN или IsNumeric?
  • Разбор JSON на Java без знания формата JSON
  • Как анализировать уличный / почтовый адрес свободной формы из текста и в компоненты
  • Разбор JSON с использованием Json.net
  • Как преобразовать jsonString в JSONObject в Java
  • Почему DateTime.Parse не обрабатывает дату UTC
  • Можете ли вы порекомендовать библиотеку Java для чтения (и, возможно, записи) файлов CSV?
  • Разбор массива JSON в java.util.List с Gson
  • Разбор JSON в C #
  • Оценка математических выражений
  • Присвоение парсерам автоматическим переменным
  • Давайте будем гением компьютера.