You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin解析Nutritionix API返回JSON报错求助

解决JSON解析问题

首先看控制台输出的JSON结构:根对象里的foods是一个JSON数组(用[]包裹),数组里的每个元素才是包含food_name的对象。你之前的错误都是因为没搞清楚层级和类型:

修改后的正确代码

override fun onResponse(call: Call, response: Response) {
    val bodys = response.body?.string() ?: return // 空值处理,避免空指针异常
    println(bodys)

    val rootObj = JSONObject(bodys)
    val foodsArray = rootObj.getJSONArray("foods")
    // 取数组中第一个食物对象,根据需求可遍历所有元素
    if (foodsArray.length() > 0) {
        val firstFood = foodsArray.getJSONObject(0)
        val foodName = firstFood.getString("food_name")
        println("食物名称:$foodName")
    } else {
        println("未找到有效食物数据")
    }
}

错误原因说明

  • 第一次错误:直接在根JSON对象里查找food_name,但该字段属于foods数组内的子对象,根对象本身没有这个字段,因此抛出No value for food_name
  • 第二次错误:把foods这个JSON数组当成JSONObject获取,数组与对象类型不匹配,因此抛出cannot be converted to JSONObject

处理多个食物项的遍历代码

如果接口返回多个食物数据,可以遍历数组处理每个元素:

for (i in 0 until foodsArray.length()) {
    val food = foodsArray.getJSONObject(i)
    val foodName = food.getString("food_name")
    // 这里添加对单个食物数据的处理逻辑
}

内容的提问来源于stack exchange,提问作者ottercrossing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:05:47