如何反序列化包含不同类型对象的json数组

2023-12-13

这是一个 json 片段,其中包含一个数组(图标),其中可以包含两种不同类型的对象(应用程序和文件夹)

{
  "icons": [
    {
      "application": {
        "displayName": "Facebook",
        "bundleId": "com.facebook.com"
      }
    },
    {
      "folder": {
        "some": "value",
        "num": 3
      }
    }
  ]
}

如何创建 java POJO 的这种 json 建模,然后反序列化它?

我提到了这个question。但我无法更改 json,我要按照那里的建议包含“类型”,然后对两个不同对象的 POJO 使用继承。


不需要自定义解串器。一个聪明的@JsonTypeInfo会成功的。

请参阅下面的类和接口:

@JsonTypeInfo(use = Id.NAME, include = As.WRAPPER_OBJECT)
@JsonSubTypes({ @Type(value = ApplicationIcon.class, name = "application"),
                @Type(value = FolderIcon.class, name = "folder") })
public interface Icon {

}
@JsonRootName("application")
public class ApplicationIcon implements Icon {

    public String displayName;
    public String bundleId;

    // Getters and setters ommited
}
@JsonRootName("folder")
public class FolderIcon implements Icon {

    public String some;
    public Integer num;

    // Getters and setters ommited
}
public class IconWrapper {

    private List<Icon> icons;

    // Getters and setters ommited
}

要反序列化您的 JSON,请执行以下操作:

String json = "{\"icons\":[{\"application\":{\"displayName\":\"Facebook\",\"bundleId\":\"com.facebook.com\"}},{\"folder\":{\"some\":\"value\",\"num\":3}}]}";

ObjectMapper mapper = new ObjectMapper();
IconWrapper iconWrapper = mapper.readValue(json, IconWrapper.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何反序列化包含不同类型对象的json数组 的相关文章

随机推荐

  • AdMob 广告单元 ID 需要多长时间才能生效?

    大约 4 小时前 我创建了一个新的广告单元 ID 并开始在未发布的 Android 应用程序的发布版本中使用它 但我得到的只是一个空白视图和以下 logcat 输出 W Ads Received error HTTP response co
  • 使用 getElementsByClassName 操作样式[重复]

    这个问题在这里已经有答案了 我不明白为什么我无法在代码中操纵 special 的样式 我确信这很简单 但它不起作用 h1 I am an h1 h1 p class special Hello p p class special Goodb
  • ADF 从代码手动调用操作

    我想从按钮 ActionListener 执行数据控制操作 CreateInsert 和 Delete 我知道可以从 数据控件 菜单插入数据控制按钮 但由于各种原因我需要这样做 其中一个突出的原因是我需要执行额外的运行时检查 我找到了以下代
  • Python 随机无重复

    这是我的代码 我试图用 0 6 之间的 7 个数字填充一个列表 没有重复 并且每次都是随机顺序 这是我的代码 但我不断收到错误 列表分配索引超出范围 但我不知道我的错误在哪里 这是我的代码 import random def generat
  • 高级 C 问题:请解释 C 构造 *({ foo(&bar); &bar; })

    这最终是在研究Linux内核源代码的completion h中的代码时出现的一个C问题 在那里我看到了我以前从未在C中使用过的C技术 虽然对它在做什么有一个模糊的感觉 但我想用精确的描述来调整我的理解 而且我不太确定如何在没有可能漫长的考验
  • 使用 PHP 时,我可以使用 JDBC 或 ODBC 连接吗?

    我有一个 PHP 应用程序 我想从 MySQL 切换到 Cache DB 我想知道是否可以使用 JDBC 或 ODBC 连接 因为 Cache 不附带 PHP 连接 Thanks PHP 可以使用 ODBC 连接directly或通过PDO
  • JPA 枚举的映射集合

    JPA 有没有办法在实体类中映射枚举集合 或者唯一的解决方案是将 Enum 与另一个域类包装并使用它来映射集合 Entity public class Person public enum InterestsEnum Books Sport
  • 斐波那契数列的负输出

    尽管使用了斐波那契数列 但在添加大量数字时 我得到了负输出long int 如何解决这个问题 include
  • Hibernate - 复合主键包含外键

    我有一个类似的问题如下 但解决方案并没有解决我的问题 hibernate复合主键包含复合外键 如何映射这个 我正在尝试连接两个表 每个表都有一个带有部分外键引用的复合主键 Table A f1 pk f2 pk f3 pk f4 pk Ta
  • 如何阻止特定应用程序访问我的网站

    有人有一个应用程序 Android 可以访问我的网站并显示一些页面 我本来可以接受它 除非该应用程序有一些错误 并且使用它的人无法使用该网站的某些功能 我怎样才能阻止这个特定的应用程序 附 我拥有对我的网络服务器的根访问权限 并且它是专用的
  • LD_LIBRARY_PATH

    我可以为单个应用程序设置 LD LIBRARY PATH 吗 我正在调查系统调用失败 那么有什么方法可以使用 LD LIBRARY PATH 设置设置正确的路径 最简单的方法是创建一个 shell 脚本 让 shell 脚本导出新的 LD
  • 使用 dompdf 生成 pdf 图像时出错

    我必须在生成的 PDF 的每一页中显示徽标 虽然它在本地系统中工作正常 但在服务器中抛出以下异常 Fatal error Uncaught exception PDFlibException with message Handle para
  • 如何在 JScrollPane 中获取 JScrollPanes 以跟随父级的大小调整

    所以我有一堆JTables Each JTable是在一个里面JScrollPane 然后我将添加其中的每一个JScrollPanes to a JPanel 然后我添加这个JPanel to a JScrollPane然后到另一个JPan
  • 为什么我无法用 Prolog 得到 Ship Puzzle 的答案?

    我需要使用 Prolog 解决 Ship Puzzle 问题 以下是事实 有5艘船 希腊的船六点出发 载着咖啡 中间的船有一个黑色的烟囱 英国船九点出发 有蓝色烟囱的法国船位于一艘运载咖啡的船的左侧 运载可可的船的右侧是一艘开往马赛的船 这
  • 检测序列的排列

    我有一个像这样的数字列表 数组 1 2 3 4 所以我的目标是检查给定的另一个数组 如果该数组是原始示例的排列 则该数组 3 4 1 2 and 1 2 4 3 是原始的排列 但是 1 2 1 1 or 1 5 4 3 not 两种可能的解
  • 确定重叠 DATETIME 范围的最大数量

    我有一张桌子 上面有一些DATETIME范围 比如 id start end 1 2011 12 18 16 00 00 2011 12 18 17 00 00 2 2011 12 19 08 00 00 2011 12 19 10 00
  • 何时从 QAbstractItemModel 发出 dataChanged

    在 Qt 中 我有一个模型子类化QAbstractItemModel 它是显示在 QTreeView 中的树 该模型支持各种形式的更改 并且都可以正常工作 相关的两个是 1 少量相关行中的部分数据发生变化 2 可视化更改意味着大多数行应更改
  • 从线性探测转向二次探测(哈希冲突)

    我当前的哈希表实现是使用线性探测 现在我想转向二次探测 后来转向链接 也许还有双重哈希 我读过一些文章 教程 维基百科等 但我仍然不知道我到底应该做什么 基本上 线性探测的步长为 1 这很容易做到 当从哈希表中搜索 插入或删除元素时 我需要
  • tinyMCE 编辑栏未显示

    我正在运行 Plone 4 1 4 当我尝试编辑用于显示tinyMCE 编辑器的文本区域时 我得到的只是一个列出 有效元素 字典的对话框 我安装了 kupu 编辑器并且工作正常 但我更喜欢tinyMCE 有人遇到过这个问题吗 任何帮助将不胜
  • 如何反序列化包含不同类型对象的json数组

    这是一个 json 片段 其中包含一个数组 图标 其中可以包含两种不同类型的对象 应用程序和文件夹 icons application displayName Facebook bundleId com facebook com folde