如何使用Java Jackson将任意字符串的JSON数组解析为列表

时间:2018-06-07 18:20:24

标签: java arrays json jackson

我试图在Java中使用Jackson以

的格式解析一串Json数组
"[{"key1":"value1"},{"key2":{"keyChild1":"valueChild1","keyChild2","valueChild2"}}]" 

但是,数组字符串中的JSON对象可以是任意有效的JSON,这意味着我无法将它们映射到Parsing JSON in Java without knowing JSON format

中建议的任何预定义POJO

目标是将此JSON数组字符串转换为可以表示数组中每个JSON的List<someObject>,这个someObject将允许我添加/删除任何键/值对在那个JSON。

我尝试过使用

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

似乎列表是空的。我真的被困在这里了。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

尝试

 String json = "[{\"key1\":\"value1\"},{\"key2\":{\"keyChild1\":\"valueChild1\",\"keyChild2\":\"valueChild2\"}}]";
 ArrayNode array = (ArrayNode) new ObjectMapper().readTree(json);

答案 1 :(得分:0)

您可以将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)进一步推动这一点。但是,您需要知道如何使用反序列化的类型。

答案 2 :(得分:0)

您可以尝试以下操作:

JsonNode node = objectMapper.valueToTree(jsonArraytring);
for(JsonNode innerNode : node.elements()){
    //here you have each inner object 
}