【发布时间】:2017-02-22 17:23:24
【问题描述】:
我正在尝试使用 api 检索项目列表。 api被设计成在项目列表中,一个项目中的一个字段是一个字符串,另一个项目中的相同字段是一个数组。如果我将该字段声明为数组,则改造会引发错误,因为在某些情况下它会返回字符串。如何在两种情况下使用一个字段。我尝试将其声明为对象,然后将其转换为适当的对象列表,但它会引发异常,因为在这种情况下,类型是 LinkedTreeMap 列表。我正在使用 Gson 进行反序列化。
例子:
{
[
{
"field": ""
},
{
"field": [{},{},{}]
}
]
}
【问题讨论】:
-
请您的 web api 开发人员更改 api 的结构。在这两种情况下都使用对象列表
-
@Shubham 是对的:如果可能,要求 API 保持一致。如果由于某种原因无法更改 API,您可能会对类似的问题/答案感兴趣:stackoverflow.com/questions/42314056/…
-
@Shubham api是第三方api,所以无法更改。
-
@RobertMarkovski 您的 JSON 实际上格式不正确(由于在编辑/发布问题时可能丢失了 JSON 结构导致的语法问题)。另一件事是 Gson 默认使用
ArrayList解析 JSON 数组,因此在这种情况下将其转换为List是完全合法的。但是如果你得到LinkedTreeMap,那么你一定有一个错误的映射:Gson 使用LinkedTreeMaps 来反序列化 JSON 对象,所以这种类型转换是非法的。只要确保你的映射是正确的。 -
@LyubomyrShaydariv 问题是我不知道要使用什么映射。 api不一致。如果该字段有数据,它将返回对象列表,但当没有数据时,它返回空字符串而不是空列表。因此,如果我尝试使用 List
映射它,它会崩溃,因为某些项目将返回空字符串。