当前位置: 首页 > 面试题库 >

在GWT上使用AutoBean解析未知类型的JSON对象

柳晔
2023-03-14
问题内容

我的服务器返回JSON中的对象列表。例如,它们可能是CatDog

当我知道它们都将是Cats时,我可以将其设置AutoBeanCodex为轻松工作。但是,当我不知道它们是什么类型时,该怎么办?

我可以给所有实体一个类型字段,但是随后我必须先解析每个实体,然后再将其传递给AutoBeanCodex,该实体与击败该点接壤。我还有什么其他选择?


问题答案:

前几天刚开始玩这个游戏,并花了几个小时尝试@Category方法和其他方法,直到发现:您可以创建type属性Splittable,该属性表示基础传输类型,该类型具有对booleans
/ Strings的某种编码/列表/地图。以我为例,我知道在设计时会通过某种包络类型,并且基于其他属性,其他字段可以是任意数量的其他autobean。

您甚至不需要在编译时就知道另一个bean的类型,可以使用Splittable的方法获取值,但是无论如何如果使用autobeans,定义包装的数据是很好的。

interface Envelope {
  String getStatus();
  String getDataType();
  Splittable getData();
}

(如果您既要发送数据又要接收数据,则可能需要设置者-将bean编码为`Splittable以将其发送到信封中比将其解码更容易)

通过网络发送的JSON被解码(可能使用AutoBeanCodex)成该Envelope类型,并且在您确定必须从该getData()方法中确定哪种类型后,调用类似这样的方法来获取嵌套对象

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
                                               SpecificNestedBean.class, 
                                               env.getData()).as();

Envelope类型和嵌套类型(在factory上文)甚至不需要是相同的AutoBeanFactory类型。这可以让您从通用传输实例中抽象出对信封的读取/写入,并对每个dataType字符串属性使用特定的工厂来解码数据的模型(和嵌套模型)。



 类似资料:
  • 我正在尝试用动态字段键将json解组到json从storcli utility for linux返回的结构。一部分代码运行良好,但是如果json数据包含许多结构,我就不能解组它。我认为这是因为DriveDetailedInformation结构没有所有的json标签。有人能帮我吗?

  • 我使用jackson 2. x进行序列化和反序列化。我注册了对象映射器到后燃烧器模块,并配置对象映射器忽略未知属性 但是当它试图序列化一个对象时,它失败了,因为属性错误找到了未知的字段 java对象还带有@JsonIgnoreProperties注释(ignoreUnknown=true) 有人能帮我理解可能出了什么问题吗 下面是Util类 枚举类编号 甲级 我反序列化的代码如下所示 我试图反序列

  • 问题内容: 我试图从提供格式数据的Web服务请求天气。我的PHP请求代码失败了: 这是返回的一些数据。为了简洁起见,一些细节已被截断,但保留了对象完整性: 问题答案: 这似乎起作用: 如果将json_decode的第二个参数设置为true,则会得到一个数组,因此无法使用->语法。我还建议您安装JSONview Firefox扩展 ,以便您可以以类似于 Firefox显示XML结构的漂亮格式的树状视

  • 我有一个这样的JSON文件: 如何使用Gson仅解析“数据”部分?我的想法是将JSON读入地图,然后用我在GSON中的键“数据”解析普通JSON内容。我能做些更优雅的事吗?

  • 问题内容: 如何使用Gson解析此JSON?我有一个具有多个对象类型的数组,但我不知道需要创建哪种对象来保存此结构。我无法更改json消息(我无法控制服务器)。 唯一起作用的类是 JSON消息 (请注意具有多个对象类型的数组。) 问题答案: 《 Gson用户指南》明确涵盖了以下内容: https://sites.google.com/site/gson/gson-user-guide#TOC-Se

  • 问题内容: 我有一个JSON,它可以是单个对象或相同对象的数组。有没有一种方法可以使用Gson解析此数据,从而区分单个对象还是数组? 我目前唯一的解决方案是手动解析json并用try catch包围它。首先,我将尝试将其解析为单个对象,如果失败,它将引发异常,然后尝试将其解析为数组。 我不想手动解析它……那将使我永远。这是正在发生的事情的想法。 这是可以是数组或单个对象的对象。 然后在与json响