Как разобрать произвольную строку массива JSON в список с помощью Java Jackson - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь использовать Джексона в Java для анализа строки массива Json в формате

"[{"key1":"value1"},{"key2":{"keyChild1":"valueChild1","keyChild2","valueChild2"}}]" 

Однако объектом JSON внутри строки массива может быть любой произвольный допустимый JSON, что означаетЯ не могу сопоставить их с любым предопределенным POJO, как предложено в Парсинг JSON в Java, не зная формата JSON

Цель состоит в том, чтобы преобразовать эту строку массива JSON в List<someObject>, который может представлять каждыйJSON внутри массива, и это someObject позволит мне добавить / удалить любые пары ключ / значение в этом JSON.

Я пытался использовать

final ObjectMapper objectMapper = new ObjectMapper();
List<JsonNode> jsonNodes = objectMapper.readValue(jsonArraytring, new TypeReference<List<JsonNode>>() {});

, и кажется, что список пуст.Я действительно застрял здесь.

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Вы можете десериализовать массив JSON в список карт:

ObjectMapper mapper = new ObjectMapper();
String json = "[{\"key1\":\"value1\"},{\"key2\":{\"keyChild1\":\"valueChild1\",\"keyChild2\":\"valueChild2\"}}]";
List<Object> list = mapper.readValue(json, List.class);
list.forEach(o -> {
    System.out.println(o);
    System.out.println(o.getClass());
});

Который выдает:

{key1=value1}
class java.util.LinkedHashMap
{key2={keyChild1=valueChild1, keyChild2=valueChild2}}
class java.util.LinkedHashMap

Вы можете продвинуть это еще дальше, вызвав mapper.readValue(json, Object.class).Но тогда вам нужно знать, как использовать десериализованные типы.

0 голосов
/ 07 июня 2018

Вы можете попробовать следующее:

JsonNode node = objectMapper.valueToTree(jsonArraytring);
for(JsonNode innerNode : node.elements()){
    //here you have each inner object 
}
0 голосов
/ 07 июня 2018

попробуй

 String json = "[{\"key1\":\"value1\"},{\"key2\":{\"keyChild1\":\"valueChild1\",\"keyChild2\":\"valueChild2\"}}]";
 ArrayNode array = (ArrayNode) new ObjectMapper().readTree(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...