【发布时间】:2021-11-01 18:21:49
【问题描述】:
我有一个可能具有不同值的 JSON 响应。
"values": [
{
"type": "AAA",
"value": 3
},
{
"type": "BBB",
"value": [
{
"ABC": 8
},
{
"DEF": 9
},
{
"GHI": 9
},
{
"JKL": 8
},
{
"MNO": 9
},
{
"PQR": 9
}
]
}
]
数据类
data class Values(
@SerializedName("type")
@Expose
val type: String,
@SerializedName("value")
@Expose
val value: Int)
如您所见,value 可以是 Int 或另一个 Json 数组。任何想法如何为此编写反序列化器? Android 应用程序当前正在使用 Int 字段(类型 AAA),我正在尝试集成潜在的数组值(类型 BBB)。谢谢。
【问题讨论】:
-
即使
value是单个 int 值,您能否将其设为 Json 数组?我的意思是只需将该 int 值添加到 json 数组并返回它,因为这将使 json 数组在所有情况下都成为统一类型,并且更容易建模,因此更容易反序列化。如果发生这种情况,我有一个解决方案,即如果您可以控制来自后端的数据 -
我也在研究一些相关的问题,有些场景只是将其转换为原始类型数组。不幸的是,我无法控制数据的嵌套
-
如果 json 对象的键和值对您都很重要,并且在输入单个值的情况下,您可以做的一件事是创建一个
List<Pair>如果你不会使用它。如果您同意在下面的答案部分中继续使用此方法,我也可以在这种情况下为您提供详细的解决方案,但只需先与您确认 -
就像下面的一些答案建议的那样,我们将进行自定义反序列化,然后将您的模型
value更改为List<Pair而不是 int 我已经在上面描述了如何处理单个值案例 -
很遗憾,我无法转换为 List,因为该应用有键值对
标签: android json kotlin gson retrofit