【问题标题】:How to get json data in kotlin using gson?如何使用 gson 在 kotlin 中获取 json 数据?
【发布时间】:2018-09-09 09:19:28
【问题描述】:

这是我的 json:

{
    "events": [
        {
            "strHomeTeam": "Liverpool",
            "strAwayTeam": "Swansea",
         }
     ]
}

这是我的模型:

data class Detail(@SerializedName("events") val events : EventDetail)
data class EventDetail(val strHomeTeam : String, val strAwayTeam: String)

这是我将 json 数据传递给模型的代码:

val body = response?.body()?.string()
val gson = GsonBuilder().create()
val eventData = gson.fromJson(body, Detail::class.java)

但我收到以下错误:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 12 path $.events

谁能帮帮我?

【问题讨论】:

  • 在 JSON 中你有一个 EventDetail 的数组/列表,而在你的 Detail 类中你有一个简单的字段。将其更改为 Array 应该可以解决您的问题
  • 谢谢你,但是如何访问 EventDetail 属性,例如“strHomeTeam”
  • 从 Detail 对象可以访问 EventDetails 数组。示例:for(eventData.events 中的详细信息){ println(detail.srtHomeTeam) }
  • 非常感谢,已解决。祝你有美好的一天:)
  • @Lukmanhakim 标记正确答案,如果你解决了你的问题

标签: android android-studio kotlin gson


【解决方案1】:

改变

data class Detail( @SerializedName("events") val events : EventDetail)|

到

data class Detail( @SerializedName("events") val events : List<EventDetail>)

【讨论】:

    【解决方案2】:

    你应该像下面这样创建你的 pojo 类

      data class EventsModel(
    
        @field:SerializedName("events")
        val events: List<EventsItem?>? = null
    )
    

    EventsItem 类应该在哪里

      data class EventsItem(
    
        @field:SerializedName("strHomeTeam")
        val strHomeTeam: String? = null,
    
        @field:SerializedName("strAwayTeam")
        val strAwayTeam: String? = null
    )
    

    【讨论】:

    • 不需要@SerializedName,因为变量已经有一个匹配的名称。此外,如果 JSON 中的值是强制性的,则不需要该选项
    • 我很好奇。为什么在SerializedName前加field:
    猜你喜欢
    • 2019-02-12
    • 2022-11-20
    • 1970-01-01
    • 2017-10-22
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多