【问题标题】:How to parse arbitrary string of JSON array to a list using Java Jackson如何使用 Java Jackson 将 JSON 数组的任意字符串解析为列表
【发布时间】:2018-06-07 18:20:23
【问题描述】:

我正在尝试在Java中使用Jackson来解析格式为

的Json Array字符串
"[{"key1":"value1"},{"key2":{"keyChild1":"valueChild1","keyChild2","valueChild2"}}]" 

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

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

我尝试过使用

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 必须是 POJO 吗?听起来您只是在处理原始 json,所以您可以改用 JSONNode?​​span>

标签: java arrays json jackson


【解决方案1】:

试试

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

【讨论】:

    【解决方案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) 进一步推动这一点。但是你需要知道如何使用反序列化的类型。

    【讨论】:

      【解决方案3】:

      您可以尝试以下方法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 2011-04-08
        • 2014-09-18
        相关资源
        最近更新 更多