将平面JSON对象分配到多个类中

时间:2015-10-22 17:31:02

标签: java json jackson

我正试图找出一种方法将“参与者”对象的选择属性分配到特定的类中:

这是我正在使用的格式

"participants": [
    {
        "person_id": "18044029",
        "role_id": "35351535",
        "person_name": "Lella Vignelli",
        "person_date": "Italian, b. 1934",
        "role_name": "Donor",
        "role_display_name": "Donated by"
    },
    {
        "person_id": "18042329",
        "role_id": "35351535",
        "person_name": "Massimo Vignelli",
        "person_date": "Italian, active USA, 1931\u20132014",
        "role_name": "Donor",
        "role_display_name": "Donated by"
    }
]

这是我的课程“

@JsonIgnoreProperties(ignoreUnknown = true)
public class ChObject {

@JsonProperty("participants")
private List<Participation> participants;

//Setters and getters
}

以下是参与课程:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Participation {

private Role role;

private Participant participant;
//Setters and getters

}

角色类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Role {

@JsonProperty("role_id")
private int role_id;

@JsonProperty("role_name")
private String role_name;

//Setters and getters
}

参与者课程:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Participant {

private int person_id;

@JsonProperty("person_name")
private String person_name;

@JsonProperty("person_date")
private String person_date;

//Setters and getters
}

我遇到的问题是我无法弄清楚如何将“person_name”和“person_date”属性放入Participant类或“role_id”和“role_name”属性到Role类中参与课程。

Participation类可以访问所有这些属性,但我似乎无法将它们分配给Participant和Roles类的属性。

感谢您的帮助。 对不起,如果我不是100%清楚一切。

1 个答案:

答案 0 :(得分:1)

您的类结构需要匹配JSON文档的结构,该文档是包含单个List<Participant>类型字段的1个对象,每个Participant都有这6个属性。

在正确反序列化之后,您可以将数据移动到您拥有的其他类。

正确的课程是:

public class ChObject {

    @JsonProperty("participants")
    List<Participant> participants;

    // setters & getter omitted

}

public class Participant {

    @JsonProperty("person_id")
    private String id;

    @JsonProperty("role_id")
    private String roleId;

    @JsonProperty("person_name")
    private String name;

    @JsonProperty("person_date")
    private String date;

    @JsonProperty("role_name")
    private String roleName;

    @JsonProperty("role_display_name")
    private String roleDisplayName;

    // setters & getters omitted

}

另外,请注意没有必要将java字段名称与属性名称匹配,因为您在JsonProperty注释中指定了其JSON名称。