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

将Json反序列化为Object的通用方法

宋晋
2023-03-14

这是一个特定的问题,我在Gson的javadoc中找不到关于这个话题的任何信息。

目前,我正在尝试将Json(1){foo:“bar”,“bar:“foo”}解析为对象实体。通常我会将这些值映射到实体对象,并带有foobar字段,但是我希望更独立于API。

为了(1)我会

public class Entity {
String foo;
String bar;
}

但是如果我们测试另一个endpoint,得到的Json(2)会是这样的

{"not Foo":"bar","not Bar":"foo"}

这使得我以前构造的Entity毫无用处,我需要创建一个新的Class,其中包含相应的字段。

所以我真正的问题是:

>

  • 是否有一个通用的(比我的例子更通用的)方法将Json推入GenericEntity-

    或者,是否有其他依赖项支持开箱即用?

  • 共有2个答案

    罗和煦
    2023-03-14

    您可以使用注释@序列化名称,如每个字段的多个GSON@序列化名称中编写的。但是架构必须是相同的,您只有键名的替代项。

    陈瀚玥
    2023-03-14

    您没有反序列化问题,您有一个不知道如何表示可能异构的数据的问题。

    没有必要说它应该是对象,因为它肯定应该是对象下游的某种类型,可能不止一种。首先解决这个问题:定义所有用例可能需要使用的所有类型,然后您很可能会看到如何解决反序列化问题。

    当然,对于{…}之间定义的任何JSON文本 你可以选择地图

    • 进一步Map

    使用上述规则,您可以或多或少地表示所有内容,并且可以编写Gson反序列化程序,根据每个节点的JSON类型(同时通过JSON树进行迭代)向您提供这些类型。然而,目前还不清楚如何利用这种异构的非类型化数据结构。

     类似资料:
    • 问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放置了类的变量和构造函数,但也包含了getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单:

    • 问题内容: 我对WCF有点陌生,将尝试清楚地描述我要做什么。 我有一个使用JSON请求的WCF Web服务。我在大多数情况下都可以很好地发送/接收JSON。例如,以下代码可以正常运行,并且符合预期。 JSON已发送: WCF: 这将按预期返回带有“ Dave”的JSON对象。问题是我无法始终保证我收到的JSON与我的DataContract中的成员完全匹配。例如,JSON: 由于大小写不匹配,将无

    • 当使用ObjectMapper将json字符串转换为实体时,我可以将其设置为通用的: 现在让我们假设我想读集合。我可以做到: 我想写一个与上述方法等效的方法,但用于集合。因为java中不能有泛型数组,所以这样的东西是行不通的: 这里有一个几乎可行的解决方案: 问题是它没有反序列化为的列表,而是。有没有什么方法可以更进一步,如下所示?

    • 我正在努力实现的是: 我们有一个JSON对象流进来。 我想从JSON重建一个Java对象。 我想应用转换(如更改字符串的格式和拒绝一个对象,如果满足一些条件,如'isToBe消耗'==false和可能的平坦从嵌套到线性的继承) 我希望能够将JSON对象的值存储到数据库中。 当一种新类型的JSON对象流出现时,我可以为每种类型的流运行CREATE TABLE,但我不想做任何代码更改。 换句话说,我希

    • 问题内容: 我在这里发现了同样的问题… …但是没有正确的答案。 最好的建议之一是将嵌套对象包装到新类中,但是这种方法引入了另一个问题:乐高名称。 在我的示例中,此类的最逻辑名称是与父类相同的名称,当然这是不可能的。我的示例很简单,我只想消除父类中的“语言”属性。有人可以帮我做吗? json的示例: 问题答案: 如果JSON属性名称与c#命名约定冲突,则可以在序列化期间使用或批注替换其他名称。 例如

    • 问题内容: 我希望这个问题最终能找到一个答案,使之永远清楚。 有模特儿: JSON输入: 以及两种反序列化泛型类型的推荐方法: 要么 Jackson永远无法处理通用类型T,它认为这是JavaType的Map,但由于类型擦除而找到了对象类型构造函数参数,并抛出错误。那是杰克逊的臭虫,还是我做错了什么?TypeReference或JavaType的显式规范还有什么用? 问题答案: 您需要在构造函数上添