我是新人,尝试在 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/