当前位置: 首页 > 知识库问答 >
问题:

一个将JSONArray转换为泛型列表的函数

尚宏硕
2023-03-14

我有JSON数据表单响应如下所示

{
  "message": "",
  "data" : [...]
}

data包含

data class News(
  @SerializedName("id") val id: Int,
  @SerializedName("title") val title: String,
  @SerializedName("description") val desc: String
)
data class Product(
  @SerializedName("id") val id: Int,
  @SerializedName("name") val name: String
)
fun JSONObject.toNewsList() = Gson().fromJson<List<News>>(getJSONArray("data").toString(),
    object : TypeToken<List<News>>(){}.type)!!

fun JSONObject.toProductList() = Gson().fromJson<List<Product>>(getJSONArray("data").toString(),
    object : TypeToken<List<Product>>(){}.type)!!
fun <T> JSONObject.toList() = Gson().fromJson<List<T>>(getJSONArray("data").toString(),
    object : TypeToken<List<T>>(){}.type)!!

编辑:我的项目中的每个响应总是以加密字符串的形式接收,这就是为什么我必须自己映射响应,而不能将响应类型放在call方法中。这是我的调用函数的样子

@POST("endpoint")
fun service(@Body body: RequestBody): Call<String>

共有1个答案

劳和雅
2023-03-14

您可以使用typeToken.getParameterized,如下所示:

inline fun <reified T> JSONObject.toList(): List<T> {
    val typeToken = TypeToken.getParameterized(List::class.java, T::class.java)
    return Gson().fromJson<List<T>>(json, typeToken.type)!!
}
 类似资料:
  • 我正在修改open JDK以添加特性,我已经遇到了两次,但没有好的解决方案。

  • 我正在尝试将列表的元组转换为列表,但是我没有成功,所以我有了这个函数 获取输入,例如: ( [1,2,3,4], [7,8,9] ) 并应返回: [1,7,2,8,3,9,4] 我有 结果是: [1,7,2,8,3,9***异常:hw2.hs:29: 1-54:函数函数中的非穷尽模式 我知道我得到这个错误,因为列表是不一样的大小,你们怎么认为我可以解决这个问题

  • 这个问题的范围是JSON处理的JavaAPI(JSR 353)。 给定一个元素为JsonString的JsonArray,我如何轻松地将其转换为

  • 假设我有两个通用列表。我想将一个泛型值从列表映射到另一个泛型值。 因此列表<.NameAndSurnamedTo>需要映射到另一个列表<.NameAndSurnamedToTwo>。 做这样的手术最好的方法是什么?

  • 问题内容: 我有以下格式的行: 现在,我要在文件中写入以下内容: 基本上将上面转换成jsonarray? Python中是否有内置方法,库或函数可将数组“转储”到json数组中? 另请注意,我不希望在文件中序列化“ L”。 问题答案: 使用该模块生成JSON输出: 这会将JSON结果直接写入文件(如果文件已经存在,则替换任何先前的内容)。 如果您需要Python本身中的JSON结果字符串,请使用(

  • 问题内容: 我将数据表转换为C#通用列表。 现在如何使用json.net 将其转换为json?任何建议。 json格式的样本应该像这样, 问题答案: 这是一个例子: 文档: 使用Json.NET的LINQ to JSON