gpt4 book ai didi

java - kotlin 中的二维列表转换为 com.google.gson.internal.LinkedTreeMap

转载 作者:行者123 更新时间:2023-12-02 04:06:19 24 4
gpt4 key购买 nike

我是 kotlin 新手,刚刚将我的代码从 java 迁移到 kotlin。我有一个数据类 HistoryList,用于解析来自 API 的响应。

data class HistoryList(
@SerializedName("code")
@Expose
var code: String = "",

@SerializedName("historyByDate")
@Expose
var histories : List<List<History>>
)

但是当我尝试解析历史记录并访问第二个列表时,例如历史记录[0][0]。返回值被转换为 com.google.gson.internal.LinkedTreeMap。我尝试调查数据类并尝试将其反编译为java,这就是我得到的。

public final class HistoryList {
@SerializedName("code")
@Expose
@NotNull
private String code;

@SerializedName("historyByDate")
@Expose
@NotNull
private List histories;

}

正如您注意到反编译代码中的历史记录变成了一个列表,我猜它应该是

List<List<Histories>> histories;

谁能给我解释一下:
——反编译后的类怎么变成这样了
- 为什么 histories[0][0] 被转换为 com.google.gson.internal.LinkedTreeMap。- 如何正确解析数据类

顺便说一句,在使用这个数据类之前,当我仍在 java 中使用它时,它运行良好。访问 history[0][0] 返回了 History 的实例

更新我忘了包含我正在解析的 json。感谢您指出 Alexey Soshin。

{
"code": "success",
"historyByDate": [
[
{
"charge": 73728,
"action": "DATA"
},
{
"charge": 105472,
"action": "DATA"
},
{
"charge": 14336,
"action": "DATA"
},
{
"charge": 101376,
"action": "DATA"
},
{
"charge": 0,
"action": "DATA"
},
{
"charge": 15360,
"action": "DATA"
},
{
"charge": 18432,
"action": "DATA"
},
{
"charge": 1060864,
"action": "DATA"
},
{
"charge": 700416,
"action": "DATA"
},
{
"charge": 7168,
"action": "DATA"
},
{
"charge": 0,
"action": "DATA"
}
],
[
{
"charge": 0,
"action": "DATA"
},
{
"charge": 0,
"action": "DATA"
}
],
[
{
"charge": 0,
"action": "DATA"
},
{
"charge": 0,
"action": "DATA"
}
]
]
}

最佳答案

回答你的第一个问题,反编译后的类怎么变成这样了,叫做type erasure .

不过,关于你的第二个问题。我没能重现该错误。
您没有指定您的 History 类是什么样子,所以我只是使用:

数据类历史记录(val a: String, val b: Int)

而且您也没有指定如何解析 JSON,所以这就是我所做的:

val list = HistoryList("myHistoryList",
listOf(
listOf(History("a", 1), History("b", 2)),
listOf(History("c", 3), History("d", 4), History("e", 5))
))

val gson = Gson()
val historyAsJson = gson.toJson(list)

println(historyAsJson)
// Results in {"code":"myHistoryList","historyByDate":[[{"a":"a","b":1},{"a":"b","b":2}],[{"a":"c","b":3},{"a":"d","b":4},{"a":"e","b":5}]]}

val historyAsObject = gson.fromJson(historyAsJson, HistoryList::class.java)

// Making sure that it's indeed History object
val h: History = historyAsObject.histories[0][0]
println(h)

如您所见,我使用 gson.fromJson(historyAsJson, HistoryList::class.java) 进行转换,并使用 historyAsObject.histories[0][0] 按预期工作。

关于java - kotlin 中的二维列表转换为 com.google.gson.internal.LinkedTreeMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com