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

Kotlin 使用 GSON 将 json 数组转换为模型列表

南门峰
2023-03-14

我无法将JSON数组转换为GroupModel数组。以下是我使用的JSON:

[{
  "description":"My expense to others",
  "items":["aaa","bbb"],
  "name":"My Expense"
 },
 {
  "description":"My expense to others","
  items":["aaa","bbb"],
  "name":"My Expense"
 }]

组模型类为:

class GroupModel {
    var name: String? = null
    var description: String? = null
    var items: MutableList<String>? = null

    constructor(name: String, description: String, items: MutableList<String>) {
        this.name = name
        this.description = description
        this.items = items
    }
}

并且尝试以下代码会导致异常

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第2列路径$

代码:

var model = gson.fromJson<Array<GroupModel>>(inputString, GroupModel::class.java)

共有3个答案

东郭臻
2023-03-14

您需要使用TypeToken来捕获数组的泛型类型,并且您需要它是GSON视为目标的类型,而不仅仅是GroupModel::class它实际上是其中的一个列表。您可以创建一个TypeToken并按如下方式使用它:

Type groupListType = new TypeToken<ArrayList<GroupModel>>() {}.getType();
var model = gson.fromJson(inputString, groupListType);
暨宸
2023-03-14

我发现了一个解决方案,它实际上是在Android上使用静态编程语言来解析给定类的JSON数组。@Aravindraj的解决方案并不真正适合我。

val fileData = "your_json_string"
val gson = GsonBuilder().create()
val packagesArray = gson.fromJson(fileData , Array<YourClass>::class.java).toList()

所以基本上,您只需要提供一个类(例子中的< code>YourClass)和JSON字符串。GSON会解决剩下的问题。

Gradle依赖关系为:

implementation 'com.google.code.gson:gson:2.8.6'
狄英哲
2023-03-14
[{
  "description":"My expense to others",
  "items":["aaa","bbb"],
  "name":"My Expense"
 },
 {
  "description":"My expense to others","
  items":["aaa","bbb"],
  "name":"My Expense"
 }]

科特林代码

val gson = GsonBuilder().create()
val Model= gson.fromJson(body,Array<GroupModel>::class.java).toList()

格拉德勒

implementation 'com.google.code.gson:gson:2.8.5'
 类似资料:
  • 使用Gson库,如何将JSON字符串转换为自定义类的?基本上,是由我的Android应用程序创建的不同类型的日志实现的接口--SMS日志、呼叫日志、数据日志--而这个是所有这些日志的集合。我在第6行总是发现一个错误。 似乎编译器不明白我指的是类型化的。我该怎么办?

  • 我在编写从JSON字符串到对象列表的转换代码时遇到了Kotlin的问题。 类型不匹配。必需:键入!找到:()→单位 那么有没有解决办法让它为科特林工作呢?

  • 我想把sqlite数据转换成jsonarray,但我遇到了一些问题,我写了这段代码,用hasmap从sqlite解析到arraylist并用它把它更改为json,用gson转换 这就是如何解析它

  • 我的javascript代码中有一个字符串列表,我通过JQuery将其发送到基于REST的服务,如下所示: 如您所见,我将javascript数组转换为JSON数组。 现在,在服务器端,我使用Spring MVC和Jackson来接收和解析输入JSON: 但我总是得到: 我尝试从JSON对象中删除引号,还尝试使用,但没有成功。 根据OQJF建议进行更新: 我修改了我的帖子请求如下: 现在调用了我的

  • 问题内容: 目前,我正在使用带有webView前端的本机android应用程序。 我有类似的东西: 在活动中 我做了一个dataObject数组,比如dataObject x [5]; 现在,我想将这5个dataObject作为JSON的回调函数传递给我的javascript webView接口。 我浏览了互联网,似乎大多数教程都在谈论如何转换。没有太多关于。我找到了一个教会我的人,可以工作。 但