有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图用Java中的Jackson来解析Json数组的字符串,格式为

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

然而,数组字符串中的JSON对象可以是任意有效的JSON,这意味着我无法将它们映射到Parsing JSON in Java without knowing JSON format中建议的任何预定义POJO

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

我试着用

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

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

任何帮助都将不胜感激


共 (2) 个答案

  1. # 1 楼答案

    试试看

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

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