当前位置: 首页 > 知识库问答 >
问题:

反序列化JSON时确定类型

姜俊民
2023-03-14

我正在将RedditAPI中的一些内容反序列化到POJO中。我的目标是尽可能简化代码,因为reddit中实体之间的JSON结构通常是相同的。

例如,反序列化链接对象的JSON如下所示:

[
    {
        "kind": "Listing",
        "data": {
            "modhash": "",
            "children": [
                {
                    "kind": "t3",
                    "data": {
                        "title": "A sample link from reddit"
                    }
                }
            ]
        }
    }
]

我可以反序列化这一点没有问题,但由于reddit注释的不同之处在于其类型为t1,并且在其下方的数据对象中具有不同的结构,因此我希望将相同的类结构重新用于JSON包装,而不必创建多个具有一行或两行差异的复制类。

我创建了一个空白接口RedditEntity,并创建了一个实现它的RedditLink类。我的问题是我不知道如何告诉Jackson要反序列化到什么接口实现。通常我会使用@JsonSubType注释,但这只适用于对象内的成员,而不适用于包装它的成员。我也不知道如何编写一个可以在类似级别上工作的自定义反序列化器,我可以在其中确定父对象的类型。

那么,我的问题是,如何根据上面的类型反序列化数据对象?

共有1个答案

郑承恩
2023-03-14

你为什么需要知道上面的类型?看起来应该这样做:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "kind")
@JsonSubTypes({
        @JsonSubTypes.Type(RedditListing.class),
        @JsonSubTypes.Type(RedditLink.class),
        @JsonSubTypes.Type(RedditComment.class)})
public static interface RedditEntity {}

@JsonTypeName("Listing")
public static class RedditListing implements RedditEntity { ... }

@JsonTypeName("t1")
public static class RedditComment implements RedditEntity { ... }

@JsonTypeName("t3")
public static class RedditLink implements RedditEntity { ... }
 类似资料:
  • 我以前从未使用过JSON,我想序列化

  • 问题内容: 可以说我有以下格式的JSON: 我试图避免自定义反序列化器,并尝试将上述JSON(称为Wrapper.java)反序列化为Java POJO。“类型”字段指示“对象”反序列化,即。type = foo表示使用Foo.java反序列化“ object”字段。(如果type = Bar,则使用Bar.java反序列化对象字段)。元数据/所有者将始终使用相同的反序列化方式,每个方法都使用一个

  • 问题内容: 我有以下JSON字符串要反序列化: 我正在使用DataContractJsonSerializer方法。 它由项目数组组成,我找不到使用VB.Net可以反序列化此结构的示例。我具有以下Application类来存储此信息: 问题答案: 我建议你使用过。原因如下: 更快 比简单的序列化需要更多的代码。 您无需将and 属性与 使用此数据类 并使用它反序列化您的: 如果仍要使用,则可以使用

  • 我有一个简单的问题,假设我有这个json 以这种方式映射: 我想知道是否可以通过使用一些自定义setter/注释或其他东西在内部对象中保存一个外部字段: PS:由于json的复杂性,使用自定义反序列化是我最后的选择

  • 我想解析这个json文件。 {“特征”:[{“类型”:“特征”,“几何”:“{“类型”:“多边形”,“坐标”:[[26.4217861898109,40.127607984644],[26.4219934821323,40.1275230229872],[26.4218810759267,40.1273800013679],[26.4216801413981,40.1274730404221],[

  • 我的JSON如下: 我找到了Newtonsoft JSON。NET为C#反序列化库。我试着使用它如下: 如何访问对象以获取所有“类型”数据?我尝试了一个循环,但它不起作用,因为对象没有枚举器。