嵌套的JSONObject反序列化为JSONObject

时间:2019-03-20 16:07:15

标签: java json serialization jackson deserialization

因此,我正在反序列化嵌套的JSONObject,但是不想为每个嵌套的对象创建一个类。我正在尝试使用嵌套的JSONObjects并将其放在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,我无法识别字段“终止”。

我想要一个:

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 个答案:

答案 0 :(得分:0)

您需要改进一下示例:

  • reply-channel,启用此功能可以 解开DeserializationFeature.UNWRAP_ROOT_VALUE对象。
  • JSON注释添加到您的JsonRootName类中,因为类名与属性POJO不匹配。
  • 使用来自containerStatuses库的JsonNode代替可能来自Jackson的{​​{1}}。

改进的示例如下所示:

JSONObject

上面的代码显示:

org.json