首页 > 解决方案 > 我想使用杰克逊库将嵌套在另一个对象中的 json 对象映射到 POJO

问题描述

我有一个对象嵌套在 Json 文件中的另一个对象中。我想将此对象与字段映射到模型类。

{
"code": 200,
"time": "2019-09-05T07:09:44.228+0000",
"data": {
    "statuses": [
        {
            "statusType": "IN_PROGRESS",
            "statusTimestamp":"019-09-05T17:04:54+1000"
        },
        {
            "statusType": "SENT",
            "statusTimestamp":"2019-09-05T21:04:55+1000"
        },
        {
            "statusType": "OPENED",
            "statusTimestamp":"2019-09-05T23:04:55+1000"
        },
        {
            "statusType": "INTERACTION_ID_RECEIVED",
            "statusTimestamp":"2019-09-06T00:04:55+1000"
        }
    ]
},
"status": 200,
"message": null,
"errors": null,
}

我想将 statusType 和 TimeStamp 映射到自定义模型类。

型号类:

公共类模型{

private String statusType;
private DateTime statusTimestamp;

public Model(String statusType, String statusTimestamp) {
    this.statusType=statusType;
    this.statusTimestamp=new DateTime(statusTimestamp);
}
public String getStatusType() {
    return statusType;
}

public void setStatusType(String statusType) {
    this.statusType = statusType;
}

public DateTime getStatusTimestamp() {
    return statusTimestamp;
}

public void setStatusTimestamp(String statusTimestamp) {
    this.statusTimestamp = new DateTime(statusTimestamp);
}

}

我想将状态映射到这个模型类并将这些对象存储在类似这样的链接中

列出状态 = ParsedJson.read("$..['statuses'][*]", List.class)

标签: javajsonspringjackson

解决方案


如果您不想对整个响应进行建模,可以使用 Jackson 将 JSON 解析为树节点,然后仅映射您关心的部分:

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json);
JsonNode statusesNode = rootNode.path("data").path("statuses");
List<Status> statuses = mapper.convertValue(statusesNode,
    new TypeReference<List<Status>>(){});

推荐阅读