因此,在我使用的这个 api 中,我经常遇到 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>
在需要时自动自动?
最佳答案
事实证明解决方案非常简单:
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
关于java - 处理数组或对象的 json 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047168/