У меня есть ответ JSON ниже, который я получаю от службы отдыха. Теперь мне нужно десериализовать ниже ответ JSON в POJO. Я работаю с Джексоном.
{
"pagination": {
"number": 1,
"entriesPerPage": 200,
"total": 3
},
"postings": [{
"categories": [{
"taskid": "79720",
"name": "Sunglasses",
"parentCategory": {
"taskid": "394",
"name": "Sunglasses & Fashion Eyewear",
"parentCategory": {
"taskid": "2340",
"name": "Men's Accessories",
"parentCategory": {
"taskid": "10987",
"name": "Clothing, Shoes & Accessories"
}
}
}
}]
},
{
"categories": [{
"taskid": "12980",
"name": "Toys",
"parentCategory": {
"taskid": "123",
"name": "Fashion",
"parentCategory": {
"taskid": "78765",
"name": "Men's Accessories"
}
}
}]
}],
"total": 2
}
В приведенном выше json postings
— это массив JSON, который может иметь несколько объектов posting
json. Теперь categories
также является массивом JSON. Теперь сложная часть заключается в том, что я могу иметь несколько уровней parentCategory
внутри каждого объекта категории, и я не знаю, сколько уровней parentCategory
у меня будет. Приведите выше JSON, мне нужно извлечь taskid
каждой категории и taskId
последней parentCategory
. Так должно быть так:
79720=10987
12980=78765
Где 79720
— это идентификатор задачи категории, а 10987
— идентификатор задачи последней parentCategory
. Аналогично для другого.
Ниже приведен мой код, в котором я десериализую JSON в свой POJO, выполнив http-вызов:
ResponseEntity<Stuff> responseEntity = HttpClient.getInstance().getClient()
.exchange(URI.create(endpoint), HttpMethod.POST, requestEntity, Stuff.class);
Stuff response = responseEntity.getBody();
List<Posting> postings = response.getPostings();
for(Posting postings : postings) {
//....
}
У меня есть путаница - как сделать POJO для вышеуказанного JSON? Я попытался использовать jsonschema2pojo, но он не создает правильных классов для parentCategory
. Поскольку у меня могут быть вложенные уровни parentCategory, о которых я не знаю заранее.
Возможно ли это сделать с помощью Джексона?
Это класс POJO, сгенерированный для Category
и ParentCategory
. Я не уверен, нужно ли мне вносить какие-либо изменения здесь, чтобы я мог анализировать рекурсивный объект parentCategory
.
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"taskid", "name", "parentCategory"})
public class Category {
@JsonProperty("taskid")
private String taskid;
@JsonProperty("name")
private String name;
@JsonProperty("parentCategory")
private ParentCategory parentCategory;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
...
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"taskid", "name", "parentCategory"})
public class ParentCategory {
@JsonProperty("taskid")
private String taskid;
@JsonProperty("name")
private String name;
@JsonProperty("parentCategory")
private ParentCategory parentCategory;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
...
}
parentCategory
рекурсивен. Найдите и прочитайте о рекурсивном подходе Джексона. - person PeterMmm   schedule 27.01.2018JsonManagedReference
илиJsonBackReference
в моем случае. Я обновил свой вопрос с помощью POjO, который у меня есть для объектовCategory
иParentCategory
. - person user1950349   schedule 27.01.2018