【问题标题】:Need to deserialize this JSON with Jackson - [{}, {}, {}] - What Jackson annotation to use for JSON array?需要使用 Jackson 反序列化此 JSON - [{}、{}、{}] - 用于 JSON 数组的 Jackson 注释是什么?
【发布时间】:2019-04-11 05:22:49
【问题描述】:

我目前正在编写从休息服务获取 JSON 响应的 Java 客户端代码。对于我的 JSON 响应,我需要将其反序列化为 pojo。如果 JSON 的最外层包装器是包含对象列表的方括号,我可以使用什么 Jackson 注释将其加载到数组或 ArrayList 中?

JSON 看起来像这样:

[{"key1": "val1"}, {"key2": "val2"}, {"key3": "val3"}]

【问题讨论】:

标签: java arrays json jackson


【解决方案1】:

Jackson 可以将 json 直接解组到您的对象,反之亦然。

public void givenJsonArray_whenDeserializingAsArray_thenCorrect() 
  throws JsonParseException, JsonMappingException, IOException {

    ObjectMapper mapper = new ObjectMapper();
    List<MyDto> listOfDtos = Lists.newArrayList(
      new MyDto("a", 1, true), new MyDto("bc", 3, false));
    String jsonArray = mapper.writeValueAsString(listOfDtos);

    // [{"stringValue":"a","intValue":1,"booleanValue":true},
    // {"stringValue":"bc","intValue":3,"booleanValue":false}]

    MyDto[] asArray = mapper.readValue(jsonArray, MyDto[].class);
    assertThat(asArray[0], instanceOf(MyDto.class));
}

来源:https://www.baeldung.com/jackson-collection-array

【讨论】:

    【解决方案2】:

    你可以试试这个

    String json = "[{\"key1\": \"val1\"}, {\"key2\": \"val2\"}, {\"key3\": \"val3\"}]";
    ObjectMapper mapper = new ObjectMapper();
    ArrayList<Map<String,String>> list = mapper.readValue(json, Object.class);
    for (Map map : list)
        for (Object key :map.keySet()) 
            System.out.println("key: "+key.toString()+" value:"+map.get(key));
    //result
    //key: key1 value:val1
    //key: key2 value:val2
    //key: key3 value:val3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多