java - 处理数组或对象的 json 字段?

标签 java json jackson

因此,在我使用的这个 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/

相关文章:

java - 限制 Eclipse 中源文件夹之间的访问

Java Hibernate json无限递归与自引用类

php - 将数据循环成json?

javascript - Angularjs JSON Unicode 字符

java - Gson转json动态添加map到对象

java - 生成 -1 和 1 之间的随机 float 会产生 NaN

java - Spring 4 @Transactional 不起作用

javascript - 在Node-Red中解析JSON JavaScript

java - 使用 Jackson 序列化和反序列化原始 Json 字符串

java - 使用 Jackson 解析动态生成的 JSON 对象名称