首页 > 解决方案 > 无法从 Kotlin 中的 api 的 JSON 获取数据

问题描述

我必须将 Kotlin 用于一个项目。假设我有一些名为 Note 的对象。我通过以下方式制作了文件

@Parcelize 
data class Notes (
val notes: List<Note>
): Parcelable

@Parcelize 
data class Note (
val id: Int,
val text: String
): Parcelable

我注意到如果返回的 JSON 的结构如下,我还添加了 @SerializedName("all_notes")

{
"all_notes": [
    {
       "id": 1,
       "text": "Some text"
    },

它可以工作,但如果返回的 JSON 是这样的结构,我删除 @SerializedName 表示法

[
  {
    "id": 1,
    "text": "Some text"
  },

我无法获取数据。

我猜我必须以某种方式使用序列化名称,但我不确定如何使用。我需要使用第二种 JSON 文件。任何人都可以帮忙吗?

编辑:有人提出发布我得到的错误的想法,所以在这里

我现在得到的错误是

错误:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

正如我之前所说,当我使用其他 JSON 文件时它可以工作。如果我只为 API 中的一个对象排队并且我说 Notes 只是来自 Note 的变量,它也可以正常工作。我没有收到任何错误,我会打印出一张便条。

标签: androidapiandroid-studiokotlin

解决方案


我看不出你的data课程有问题,你的json. 除了你不需要data头等舱。您可以使用您的第二类直接映射您的 json,因为您的 json 不会以列表响应。

这可能对您有帮助。使用此网站为您的 json 响应构建kotlin数据类。

除非您的类字段的名称与您的属性不同,否则您不需要使用SerializedName注释,因为它只是映射到您的类实例时使用的映射器挂钩。datajsonGsonjson

如果上述内容对您没有帮助,请进一步澄清您的问题,我们需要知道您的问题到底是什么,或者stacktrace您是否有任何问题。


推荐阅读