Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson将JSON按属性存在反序列化为多态类型_Java_Json_Jackson_Polymorphism - Fatal编程技术网

Java 使用Jackson将JSON按属性存在反序列化为多态类型

Java 使用Jackson将JSON按属性存在反序列化为多态类型,java,json,jackson,polymorphism,Java,Json,Jackson,Polymorphism,假设我有一个带有三个实现的项接口(如果这有帮助的话,也可以是一个抽象类) 是否可以设置Jackson,以便根据与给定项类型相关的属性的存在创建适当实现的实例 请参见下面的JSON示例,每个项目都有不同的第二个属性:文本、数字或标志。这些属性中的每一个都在其中存储不同的数据类型 如何在不改变JSON结构的情况下进行反序列化,理想情况下也不编写基于if-else的自定义反序列化程序 { "items": [ { "id": "item-1",

假设我有一个带有三个实现的项接口(如果这有帮助的话,也可以是一个抽象类)

是否可以设置Jackson,以便根据与给定项类型相关的属性的存在创建适当实现的实例

请参见下面的JSON示例,每个项目都有不同的第二个属性:文本、数字或标志。这些属性中的每一个都在其中存储不同的数据类型

如何在不改变JSON结构的情况下进行反序列化,理想情况下也不编写基于if-else的自定义反序列化程序

{
    "items": [
        {
            "id": "item-1",
            "text": "some text"
        },
        {
            "id": "item-2",
            "number": 12345
        },
        {
            "id": "item-3",,
            "flag": true
        }
    ]
}

为第二个item属性选择的数据类型只是一个示例。它们也可以是某种自定义类型或集合。关键是如何设置Jackson,以便它通过构造函数参数类型或特定于给定项类型的属性名的存在来使用适当的项实现。

如果当前JSON结构无法实现这一点,是否第二个属性在JSON中共享相同的名称,只是保留了不同的值类型?也许会有帮助。我不久前就需要这样的东西并解决了这个问题。如果在当前的JSON结构中不可能做到这一点,那么是否第二个属性在JSON中共享相同的名称,只是保留了不同的值类型?也许会有帮助。不久前我需要这样的东西,解决了这个问题。
{
    "items": [
        {
            "id": "item-1",
            "text": "some text"
        },
        {
            "id": "item-2",
            "number": 12345
        },
        {
            "id": "item-3",,
            "flag": true
        }
    ]
}