[英]Jackson: Deserialize JSON array from JSON object into Java List
我已经被这个绊倒了一段时间。 我有一个 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
class,不需要特殊的@JsonDeserialize
ObjectMapper objectMapper = new ObjectMapper();
MyJson myJson = objectMapper.readValue(json, MyJson.class);
List<MyClass> list = myJson.getResponse().getObjects();
请记住,此代码只是草稿,所有类都应该有设置器(和获取器),并且需要一些 null 检查
你可以做这样的事情。 我觉得这会更干净
@JsonIgnoreProperties(ignoreUnknown = true)
class Wrapper{
private Response response;
//setters, getters
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Response{
private List<MyClass> objects;
//setters, getters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyClass {
String name;
List<CustomProperties> customProperties;
//setters, getters
}
ObjectMapper objectMapper = new ObjectMapper();
Wrapper wrapper = objectMapper.readValue(json, Wrapper.class)
您可以通过遍历列表来提取对象和 CustomProperties。 您可以通过@JsonIgnoreProperties(ignoreUnknown = true)
仅声明您感兴趣的字段并忽略其他字段(例如,我没有包含元数据)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.