java - Jackson:将 JSON 数组从 JSON 对象反序列化为 Java 列表

标签 java spring jackson

我已经被这个问题迷惑了一段时间了。我有一个 Spring 应用程序,想要解析以下 JSON:

{
  "metadata": {...}
  "response": {
    "objects": [
      {
        "name": "someName",
        "properties": [<array_of_properties>]
      },
      ...
    ]
  }
}

进入以下 Java 对象的列表:

public class MyClass {
  String name;
  List<CustomProperties> customProperties;
}

意思是,我只想提取objects数组并仅解析它。我尝试过使用自定义反序列化器并且有效,但我必须这样做:

@JsonDeserialize(using=MyDeserializer.class)
public class MyClassList extends ArrayList<MyClass>{}

然后:

ObjectMapper objectMapper = new ObjectMapper();
List<MyClass> list = objectMapper.readValue(json, MyClassList.class) 

无论如何都要避免扩展ArrayList,因为目前我这样做是为了能够访问.class属性。

最佳答案

您可以使用几个类定义 json 结构

public class MyJson {
  private MyResponse response;
  ...
}

public class MyResponse {
  private List<MyClass> objects;
  ...
}

public class MyClass {
  String name;
  List<CustomProperty> customProperties;
  ...
}

您可以使用 Jackson 将 json 字符串解析为 MyJson 类,不需要特殊的 @JsonDeserialize

ObjectMapper objectMapper = new ObjectMapper();
MyJson myJson = objectMapper.readValue(json, MyJson.class);
List<MyClass> list =  myJson.getResponse().getObjects();

请记住,此代码只是一个草稿,所有类都应该有 setter(和 getter),并且需要一些 null 检查

关于java - Jackson:将 JSON 数组从 JSON 对象反序列化为 Java 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58378069/

相关文章:

java - PutApplicationName 与 PutApplName

java - 在maven项目中添加文件夹

java - Spring 重试Junit : Testing Retry template with Custom Retry Policy

Java 存储过程 DB2 问题

java - 你如何分派(dispatch)回 Java 中的主线程?

java - Spring框架的目的

java - 使用 spring data jpa 存储库在 Hql 查询后刷新()

spring - NoClassDefFoundError(javax/ws/rs/ProcessingException) 在 spring 服务中使用 Jersey lib

Java jackson : deserialize complex polymorphic object model: JsonMappingException: Unexpected token (START_OBJECT), 应为 VALUE_STRING

java - 当 JsonProperty 有时是数组有时是单个对象时,Jackson 反序列化