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
相关产品推荐
相关产品推荐

