【问题标题】:Gson api parsing issue KotlinGson api 解析问题 Kotlin
【发布时间】:2020-09-21 01:06:45
【问题描述】:

我正在尝试解析以下 API 调用返回的 JSON(仅限配方和成分行):

https://api.edamam.com/search?q=khachapuri&app_id=xxx&app_key=yyy

我的 GSON 模型如下所示:

class FoodModel {
    var label:String = "Yummy"
    var image:String = "https://agenda.ge/files/khachapuri.jpg"
    var ingredientLines = ""
}

启动应用程序后,我遇到以下错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

我认为我写错了模型类,因为我不清楚 json 的结构。这就是我尝试使用 Gson 的方式:val foodItems = Gson().fromJson(response, Array<FoodModel>::class.java) 有人可以帮忙吗?

【问题讨论】:

  • 能否请您发布您正在尝试解析的 json 字符串

标签: api parsing kotlin gson retrofit


【解决方案1】:

API 返回的 JSON 对象的结构与您的模型略有不同。

特别是 API 返回一个复杂的对象,您需要遍历该对象才能提取您感兴趣的信息。一个高级示例(我无法对其进行测试,但希望您能了解它的要点):

data class Response(
        val hits: List<Hit>
)

data class Hit(
        val recipe: Recipe
)

data class Recipe(
        val label: String,
        val image: String
)

val foodItems = Gson().fromJson(response, Response::class.java)

请注意,Gson 可能会以不安全的方式创建实例,这意味着您可能会无缘无故地经历 NullPointerExceptions 抛出。如果你想证明它,只需将image重命名为其他任何东西(你也可以尝试使用其他字段,没关系),你会看到它的值是null,即使类型是不可为空的.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 2018-08-12
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多