У меня есть JSON ниже, из которого мне нужно сделать Map<String, String>
. В приведенном ниже JSON у меня есть только три уровня parentCategory
, но в целом их может быть больше, а иногда и меньше.
- Ключ моей карты будет
79720
, который равенid
разделаcategories
, а значение должно быть10987
, что равноid
последнегоparentCategory
.
Теперь я могу вложить в них parentCategory
, поэтому у меня возникают проблемы с созданием POJO для этого. У меня может быть один уровень parentCategory
или я могу вложить parentCategory
в каждый parentCategory
, и мне всегда нужно получить идентификатор для последнего parentCategory
.
Поэтому я создаю для этого POJO, перейдя на jsonschema2pojo и предоставив свой JSON, где он сгенерировал мне все файлы что мне нужно. С помощью приведенного ниже JSON было создано три класса, таких как ParentCategory
, ParentCategory_
и ParentCategory__
для поля parentCategory
. Теперь, поскольку я не знаю, сколько у меня parentCategory
уровней, я не уверен, как лучше всего сгенерировать для них POJO и извлечь поле id
для последних parentCategory
. Есть ли способ сделать это с помощью Джексона?
Я должен прочитать все эти данные в POJO, так как я также читаю все другие поля.
{
"paginationResponse": {
"pageNumber": 1,
"entriesPerPage": 200,
"totalPages": 3
},
"listings": [
{
"categories": [
{
"id": "79720",
"name": "Sunglasses",
"localizedName": "Sunglasses",
"level": 4,
"leafCategory": true,
"parentCategory": {
"id": "394",
"name": "Sunglasses & Fashion Eyewear",
"localizedName": "Sunglasses & Fashion Eyewear",
"level": 3,
"leafCategory": false,
"parentCategory": {
"id": "2340",
"name": "Men's Accessories",
"localizedName": "Men's Accessories",
"level": 2,
"leafCategory": false,
"parentCategory": {
"id": "10987",
"name": "Clothing, Shoes & Accessories",
"localizedName": "Clothing, Shoes & Accessories",
"level": 1,
"leafCategory": false
}
}
}
}
],
"processlisting": {
....
},
"processlistingmetainfo": {
...
},
"processlistingproperties": [
{
"propertyName": "item_url",
"propertyValues": [
{
"stringValue": "url"
}
]
},
{
"propertyName": "listing_site_id",
"propertyValues": [
{
"stringValue": "0"
}
]
}
]
}
],
"total": 100
}
Примечание. У меня нет контроля над этой структурой JSON, поскольку она нам не принадлежит, поэтому я не могу вообще изменить структуру JSON.
Ниже приведены три класса для ParentCategory
, которые были сгенерированы на основе приведенного выше JSON, но в целом у меня может быть несколько уровней ParentCategory
, и я не знаю заранее.
public class ParentCategory {
@JsonProperty("id")
private String id;
@JsonProperty("name")
private String name;
@JsonProperty("localizedName")
private String localizedName;
@JsonProperty("level")
private long level;
@JsonProperty("leafCategory")
private boolean leafCategory;
@JsonProperty("parentCategory")
private ParentCategory_ parentCategory;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
....
}
public class ParentCategory_ {
@JsonProperty("id")
private String id;
@JsonProperty("name")
private String name;
@JsonProperty("localizedName")
private String localizedName;
@JsonProperty("level")
private long level;
@JsonProperty("leafCategory")
private boolean leafCategory;
@JsonProperty("parentCategory")
private ParentCategory__ parentCategory;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
...
}
public class ParentCategory__ {
@JsonProperty("id")
private String id;
@JsonProperty("name")
private String name;
@JsonProperty("localizedName")
private String localizedName;
@JsonProperty("level")
private long level;
@JsonProperty("leafCategory")
private boolean leafCategory;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
...
}