gpt4 book ai didi

java - 如何反序列化包含不同类型对象的json数组

转载 作者:行者123 更新时间:2023-12-01 16:51:47 24 4
gpt4 key购买 nike

这是一个 json 片段,其中包含一个数组(图标),该数组可以包含两种不同类型的对象(应用程序和文件夹)

{
"icons": [
{
"application": {
"displayName": "Facebook",
"bundleId": "com.facebook.com"
}
},
{
"folder": {
"some": "value",
"num": 3
}
}
]
}

如何创建 java POJO 的这种 json 建模,然后反序列化它?

我提到了这个question 。但我无法更改 json,我要按照那里的建议包含“类型”,然后对两个不同对象的 POJO 使用继承。

最佳答案

不需要自定义解串器。阿聪明@JsonTypeInfo就可以了。

请参阅下面的类和接口(interface):

@JsonTypeInfo(use = Id.NAME, include = As.WRAPPER_OBJECT)
@JsonSubTypes({ @Type(value = ApplicationIcon.class, name = "application"),
@Type(value = FolderIcon.class, name = "folder") })
public interface Icon {

}
@JsonRootName("application")
public class ApplicationIcon implements Icon {

public String displayName;
public String bundleId;

// Getters and setters ommited
}
@JsonRootName("folder")
public class FolderIcon implements Icon {

public String some;
public Integer num;

// Getters and setters ommited
}
public class IconWrapper {

private List<Icon> icons;

// Getters and setters ommited
}

要反序列化您的 JSON,请执行以下操作:

String json = "{\"icons\":[{\"application\":{\"displayName\":\"Facebook\",\"bundleId\":\"com.facebook.com\"}},{\"folder\":{\"some\":\"value\",\"num\":3}}]}";

ObjectMapper mapper = new ObjectMapper();
IconWrapper iconWrapper = mapper.readValue(json, IconWrapper.class);

关于java - 如何反序列化包含不同类型对象的json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38875940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com