java - 在 Java 中处理 REST 结果 (json) 中不一致的数据类型

标签 java json rest gson

我是新人,尝试在 Android Studio 的 setlist.fm 上使用 Rest API,但在将 GET 请求结果拟合到 Java 数据模型中时遇到一些问题。 特别是,我将“集合”(“集合”是指在​​音乐会上演奏的集合)建模为 Java 类。但通常情况下,我从 HTTP 请求中获取的结果已“设置”为空字符串甚至数组。

我将使用以下针对所有 Radiohead 歌单的 GET 请求作为示例: http://api.setlist.fm/rest/0.1/artist/a74b1b7f-71a5-4011-9441-d0b5e4122711/setlists.json

请注意,在大多数情况下,“集合”是一个对象。但在某些情况下,它是一个字符串。在其他情况下,它是一个数组

当我尝试使用以下代码行使用 Gson 将 json 解析到我的数据模型中时,我的 Android Studio 出现以下错误:

 gson.fromJson(result.toString(),Response.class);

它似乎在“sets”显示为空字符串而不是对象的实例上失败:

Expected BEGIN_OBJECT but was STRING at line 1 column 942 path $.setlists.setlist[0].sets

有人对如何处理此类事情有建议吗?我在迄今为止查找过的所有艺术家中都注意到了这一点。 谢谢!

最佳答案

假设 Response 是您编写的包含 json 主要字段的类,并且在其中的某个时刻您拥有:

@SerializedName("setlist")
private List<MyItem> setlist;

我还假设您的 MyItem 类包含该字段:

@SerializedName("sets")
private List<MySet> sets;

如果让 Gson 解析它,当它找到一个字符串而不是 MySet 对象的列表(-> 数组)时,它将失败。

但是你可以write a custom TypeAdapter为您的MyItem

有很多关于如何编写 Gson TypeAdapter 的文档,查找一下。

关于java - 在 Java 中处理 REST 结果 (json) 中不一致的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38714747/

相关文章:

java - 从 Restful Web 服务下载 pdf

java - 在 Java 中调用 Python 3.x 函数

javascript - 让 React 路由器与 Spring 端点一起工作

sql - Oracle APEX : Error: SyntaxError: Unexpected end of JSON input

Java UTF-8 无法正常处理 JSON

java - 将排序后的多个数据放入一个变量中(就像 HashMap 只是具有更多行)

java - Spring REST 使用 JSON 大写与小写

javascript - D3.js 和 jQuery - 多个 map 点和点击事件

java - UI-Test 和 Rest 有什么区别?

c# - 将从 Android 应用程序发送的用户名和密码读入我的 WCF REST 服务?