我无法手动解析此JSONObject.

val client = OkHttpClient()
val mediaType = "application/x-www-form-urlencoded".toMediaTypeOrNull()
val body = RequestBody.create(mediaType, "query=${listItemName}")

val request = Request.Builder()
    .url("https://trackapi.nutritionix.com/v2/natural/nutrients")
    .method("POST", body)
    .build()


    val response = client.newCall(request).enqueue(object: Callback {
        override fun onFailure(call: Call, e: IOException) {
            println("Failed to execute request")
        }

        override fun onResponse(call: Call, response: Response) {
            val bodys = response.body?.string()
            println(bodys)

            val food = JSONObject(bodys)
            val foodName = food.getString("food_name")
          
        }



    })

系统.out显示了JSONObject字符串,并且有一个"Food_name",但我一直收到下面的错误

2022-11-15 13:21:52.096 30501-30580/com.cpg12.findingfresh I/System.out: {"foods":[{"food_name":"crab","brand_name":null,"serving_qty":1,"serving_unit":"cup, flaked and pieces","serving_weight_grams":118,"nf_calories":97.94,"nf_total_fat":0.87,"nf_saturated_fat":0.24,"nf_cholesterol":114.46,"nf_sodium":466.1,"nf_total_carbohydrate":0,"nf_dietary_fiber":0,"nf_sugars":0,"nf_protein":21.1,"nf_potassium":305.62

2022-11-15 13:21:52.103 30501-30580/com.cpg12.findingfresh E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
    Process: com.cpg12.findingfresh, PID: 30501
    java.lang.Error: org.json.JSONException: No value for food_name
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1139)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: org.json.JSONException: No value for food_name

The JSON response is hereJSON response

val food = JSONObject(bodys).getJSONObject("foods")

这导致了错误

Java.lang.Error:org.json.JSONException:Value[{"Food_name":"skittle","brand_name":NULL,"Serving_qty":1,"Serving_Unit":"无法将org.json.JSONArray类型的食品转换为JSONObject

推荐答案

您正试图直接从数组中取出值,而不是循环,这是不可能的……

  val food = JSONObject(bodys) //here you are doing blunder

这应该是

val food =JsonArray(bodys)

满足您所需需求的完整代码片段

 val response = JSONObject(bodys)
 val Jarray: JSONArray = response.getJSONArray("foods")
 for (i in 0 until Jarray.length()) {
        val jsonobject: JSONObject = jsonarray.getJSONObject(i)
        val food_name= jsonobject.getString("food_name")
       
    }

我希望这对你有帮助!! 晚点谢谢我!!

Json相关问答推荐

当有嵌套数组而没有嵌套数组时,展平JSON

无法使用Jolt变换在嵌套的JSON中提取值

Powershell ConvertFrom-Json 意外地从包含字符串的单个项目数组生成字符串而不是对象数组

Oracle JSON 查询中的动态列列表

在 json 对象中存储多个键:值对

Python 将 struct 化文本转换和筛选为对象

如何使NiFi将数据库单列中的多个值转化为Solr索引中的数组?

N1QL 聚合查询 Couchbase

如何使用 LINQ 在 C# 中重构对象?

Json.NET SerializeObject 转义值以防止 XSS

如何使用 gson 将数据保存在 json 文件中?

如何使用 CORS 实现 JavaScript Google Places API 请求

一起使用 Argparse 和 Json

使用 c# 通用地展平 Json

苗条的 JSON 输出

对象序列化为 JSON(使用 Gson).如何在 UpperCamelCase 中设置字段名称?

关于使用 $ref 的 JSON 模式

请求返回字节,我无法解码它们

添加json文件注释

如何在本地存储中存储对象数组?