Kotlin 使用 Gson 将 json 字符串转换为对象列表

Posted

技术标签:

【中文标题】Kotlin 使用 Gson 将 json 字符串转换为对象列表【英文标题】:Kotlin convert json string to list of object using Gson 【发布时间】:2018-05-29 03:45:12 【问题描述】:

我在使用 Kotlin 编写从 JSON 字符串转换为对象列表的代码时遇到问题。

在Java中通常是这样的:

  Gson gson = new Gson();
    Type type = new TypeToken<List<SomeOjbect>>() .getType();
    List<SomeOjbect> measurements = gson.fromJson(json, type);
    return measurements;

但是在 Kotlin 中,当我这样尝试时:

   val gson = Gson()
    val type: Type = TypeToken<List<SomeOjbect>>.type
    val measurements : List<SomeOjbect> = gson.fromJson(text, type)
    return measurements 

IDE android Studio 将 TypeToken 表示为错误:

无法访问'':它是public/package/在'TypeToken'中

并且还强调了 所说的错误:

类型不匹配。 必需的: 类型! 成立: () → 单位

那么有没有办法让它适用于 Kotlin?

【问题讨论】:

试试这个,它使用对象而不是 Type.. 测量值:List = gson.fromJson(text, object : TypeToken>() .type)跨度> @Uttam 谢谢,它成功了。您可以将其发布为答案,我接受它 很高兴它可以帮助你.. 【参考方案1】:

您可以尝试这样做:

val objectList = gson.fromJson(json, Array<SomeObject>::class.java).asList()

编辑 [2020 年 1 月 14 日]:您不应该再使用 GSON。项目维护者之一 Jake Wharton 建议使用 Moshi、Jackson 或 kotlinx.serialization。

【讨论】:

链接:reddit.com/r/androiddev/comments/ejjroe/… 哇!这是我的 android 网络堆栈中最大的变化:D【参考方案2】:

试试这个,它使用对象而不是类型..

measurements : List<SomeOjbect> = gson.fromJson(text, object : TypeToken<List<SomeOjbect>>() .type) 

【讨论】:

以上是关于Kotlin 使用 Gson 将 json 字符串转换为对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 的 Kotlin 中使用 GSON 将 JSON 对象转换为 JSON 数组

构建 Kotlin 类以使用 Gson 将 json 响应转换为类

使用 GSON 来自 Json 的 Kotlin 数据类

如何使用 Gson @SerializedName 注释在 Kotlin 中反序列化嵌套的 Json API 响应

Kotlin如何使用GSON解析动态JSON字段?

如何使用带有 Kotlin 的 Gson 库访问 JSON 有效负载中的嵌套值