java嵌套JSONObject反序列化为JSONObject
所以我正在反序列化一个嵌套的JSONObject,但不想为每个嵌套对象创建一个类。我试图利用嵌套的JSONObject,并将其放入JSONObject中
public class ContainerStatus {
@JsonProperty("name")
private String name;
@JsonProperty("state")
private JSONObject state;
@JsonProperty("lastState")
private JSONObject lastState;
@JsonProperty("ready")
private Boolean ready;
@JsonProperty("restartCount")
private Integer restartCount;
@JsonProperty("image")
private String image;
@JsonProperty("imageID")
private String imageID;
@JsonProperty("containerID")
private String containerID;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
使用此函数反序列化:
{ "containerStatuses":
{
"name": "connect",
"state": {
"terminated": {
"exitCode": 1,
"reason": "Error",
"startedAt": "2019-03-20T15:40:08Z",
"finishedAt": "2019-03-20T15:40:50Z",
"containerID": "docker://"
}
},
"lastState": {},
"ready": true,
"restartCount": 0,
"image": "image",
"imageID": "docker-pullable://",
"containerID": "docker://"
}}
由于状态JSONObject,我得到了无法识别的字段“terminated”
我想要一个:
JsonObject state = {
"terminated": {
"exitCode": 1,
"reason": "Error",
"startedAt": "2019-03-20T15:40:08Z",
"finishedAt": "2019-03-20T15:40:50Z",
"containerID": "docker://"
}
}
我可以将其转换为通用对象,但格式不再是JSON:
@JsonProperty("state")
private Object state;
Gives me this format:
{running={startedAt=2019-03-20T14:53:53Z}}
# 1 楼答案
你需要改进一下你的例子:
DeserializationFeature.UNWRAP_ROOT_VALUE
,启用此功能 展开JSON
对象李>POJO
类添加JsonRootName
注释,因为类名与属性containerStatuses
不匹配李>Jackson
库的JsonNode
,而不是可能来自org.json
库的JSONObject
李>改进后的示例如下所示:
以上代码打印: