4
因此,我使用的這個api經常遇到包含一個數組或對象的字段的json,我不知道如何處理這個正確的方法。處理數組或對象的json字段?
什麼情況是,我在我的JSON數組是
- 一個空數組,如果沒有條目
- 對象的數組時,有一個以上的條目
- 其實不是一個數組,但只有一個條目時有一個對象。
這裏是使事情更清晰的例子:
無:
{
"what": "kittens",
"why": "I don't meow",
"kittens": []
}
之一:
{
"what": "kittens",
"why": "I don't meow",
"kittens": {
"name": "Ser Pounce",
"gender": "male"
}
}
很多:
{
"what": "kittens",
"why": "I don't meow",
"kittens": [
{
"name": "Ser Pounce",
"gender": "male"
},
{
"name": "Mr. Snuffles",
"gender": "male"
}
]
}
現在,如果這是情況並非如此,第二個例子看起來像這樣
{
"what": "kittens",
"why": "I don't meow",
"kittens": [
{
"name": "Ser Pounce",
"gender": "male"
}
]
}
我可以只使用一個POJO
public class Kittens
{
public String what;
public String why;
public List<Kitten> kittens;
public static class Kitten
{
public String name;
public String gender;
}
}
,然後反序列化一切的標準方式:
Kittens kittens = objectMapper.readValue(good_kitten, Kittens.class);
所以另一種方法是使用樹模型並手動進行大量類型檢查(使用JsonNode.isArray()
等)
這不會是可行的,但因爲會有大量的開銷,它不會是優雅和我提到也有一些嵌套的事情,當然:
{
"what": "kittens",
"why": "I don't meow",
"kittens": [
{
"name": "Ser Pounce",
"gender": "male",
"kittens": []
},
{
"name": "Mr. Snuffles",
"gender": "male",
"kittens": {
"name": "Waffles",
"gender": "female",
"kittens": [
{
"name": "Mittens",
"gender": "male",
"kittens": []
},
{
"name": "Winston",
"gender": "male",
"kittens": {
"name": "Fiona",
"gender": "female",
"kittens": []
}
}
]
}
}
]
}
現在我真的要定義類似下面的模型,並用它
public class NestedKittens
{
public String what;
public String why;
public List<Kitten> kittens;
public static class Kitten
{
public String name;
public String gender;
public List<Kitten> kittens;
}
}
但是這不會工作完成,因爲在JSON有普通老式小貓對象裏應該有List<Kitten>
。
那麼,是否有任何註釋或配置可用,使jackson從Kitten
自動轉換爲List<Kitten>
時它需要?