2015-10-22 2 views
0

Я пытаюсь выяснить способ назначения выберите свойства «участников» объектов в конкретные классы:Назначение плоского объекта JSON на несколько классов

Это формат, что я работаю с

"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» свойства в класс участника или свойства role_id и role_name в класс Role из класса участия.

Класс участия имеет доступ ко всем этим свойствам, но я не могу присвоить их свойствам классов участников и ролей.

Благодарим за помощь. Извините, если я не на 100% понятен всем.

+0

Ваша строка JSON не противоречит вашей структуре классов. В таком случае вам нужно написать собственный 'JSONDeserializer'. Вот вам [старт] (http://www.baeldung.com/jackson-deserialization). – JavaGhost

ответ

1

Структура вашего класса должна соответствовать структуре документа JSON, которая представляет собой 1 объект, который содержит одно поле типа List<Participant>, и каждый из 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 

} 

Кроме того, обратите внимание, как не нужно, чтобы соответствовать имени ява поля с именем свойства, так как вы укажите его имя в формате JSON в JsonProperty аннотацию ,

+0

+1 к этому ответу для простоты, хотя вы можете * технически * построить все это в классе участия и использовать метод @JsonSetter для назначения свойств уровня участия для под-объектов вручную. Взгляните на http://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonSetter.html. – Uncommented

+0

@ Укомплектованный я не знал о '@ JsonSetter'. Я загляну в него, спасибо :) – ESala

Смежные вопросы