如何在 for 循环中使用动态键值从 JSON 数组获取值?科特林

Posted

技术标签:

【中文标题】如何在 for 循环中使用动态键值从 JSON 数组获取值?科特林【英文标题】:How to get values from JSON array with dynamic key-values in a for loop ? KOTLIN 【发布时间】:2021-07-25 01:05:32 【问题描述】:

这是我的 JSON:

"result": 
"product_id": 283946,
"shop_id": 129, 
"is_favorite": false,
"item_sold_by": "Quantity",
"item_description": "hello",
"item_size": [
  
    "name": "Height",
    "value": "29cm"
  ,
  
    "name": "Width",
    "value": "52cm"
  
 val json = String(responseBody, charset)

                val gson = Gson().newBuilder().serializeNulls().create()

                val itemsdetailresult = gson.fromJson<ItemDetailJson>(json, genericType<ItemDetailJson>())


                Log.v("Test1", json)

                Log.v("Test2", itemsdetailresult.toString())


                Picasso.get().load(itemsdetailresult.result.pic1).into(itempic)
                itemName.text = itemsdetailresult.result.item_name
                shopName.text = itemsdetailresult.result.shop_name
                itemdescrip.text = itemsdetailresult.result.item_description
                itemprice.text = itemsdetailresult.result.price





                val obj = JSONObject(json)
                val getObject = obj.getJSONObject("result")
                val getArray = getObject.getJSONArray("item_size")



                var itemSizeArray = ArrayList<ItemSize>()
                var itemString = ""
                   for (i in 0 until getArray.length()) 
                       val objects: JSONObject
                       objects = getArray.getJSONObject(i)

                       val name = objects["name"].toString()
                       val value = objects["value"].toString()

                       itemSizeArray.add(ItemSize(name, value))


                       itemSizeArray.forEach  data ->
                           itemString = itemString.plus("$data.name : $data.value")

                       
                   

                itemsizename.text = itemString

                Log.v("PRINT", itemsizename.toString())

            

如果“item_size”数组中添加了更多值,我希望输出为 --> Height: 29cm / width:52cm 等等。如何在这个 for 循环中实现。我想在for循环中的一个变量(参数)中继续附加“name”和“value”的所有值,并在for循环之外使用这个变量。

【问题讨论】:

请检查您的 JSON 字符串,看起来它无效。 哪一个无效?你能指定吗? .. 这是我从一个巨大的 API 获得的 JSON 响应。这是我需要访问的响应的一部分。 只是出于兴趣,您认为您的问题比这里的其他问题更重要吗? meta.***.com/questions/326569/… 对不起,作为用户,我是新手。我会编辑我的问题。如果你能帮忙,那将对我有很大帮助,谢谢 没问题,只是通常会让人们不回答!无论如何,@pranavjayarayj 的回答似乎解释了你需要的一切。 【参考方案1】:

这里你只需要创建一个带有名称和值变量的自定义数据模型类。

data class ItemSizeDataModel(
val name: String?,
val value: String?
)

现在在您获取 JSON 的类中,使用 ItemSizeDataModel 来存储项目大小 - 名称和值。

val json = String(responseBody, charset)
val obj = JSONObject(json)
val getObject = obj.getJSONObject("result")
val getArray = getObject.getJSONArray("item_size")
var parameter: String

var itemSizeArray = ArrayList<ItemSizeDataModel>()

for (i in 0 until getArray.length()) 
        val objects: JSONObject
        objects = getArray.getJSONObject(i)
        val name = objects["name"].toString()
        val Value = objects["value"].toString()
        itemSizeArray.add(ItemSizeDataModel(name = name, value = value))
      

现在您可以访问 itemSizeArray 数组列表并访问每个索引的名称和值。

对于输出高度:29cm / 宽度:52cm 你可以遍历循环

var itemString = ""
itemSizeArray.forEachdata->
itemString = itemString.plus("$data.name:$data.value/")

itemString = itemString.dropLast(1)

【讨论】:

我已经有一个像 ItemSizeDataModel 这样的类,因为我正在通过模型类方法解析 JSON。我希望能够访问数组列表中的所有“名称”和“值”,因为它可以根据项目增加或减少,这就是为什么我不能给出 i = 0 或 i = 1 或任何特定的价值,因为我可以增加、减少或保持不变 我只想将“name”和“value”的所有值从 i in 0 到 getArray.length() 附加到循环中的字符串并在循环外使用该字符串跨度> 如何显示和查看我得到的所有值? 因为这是我需要的输出,所以是这样的 --> 高度:29 厘米/宽度:52 厘米。也许对于另一个项目也可以指定长度。 请检查编辑后的答案。此外,如果有长度,那么它将自动保存到自定义模型数组列表中。最后迭代得到类似 Height: 29cm / width:52cm / length: 100 cm 的东西。

以上是关于如何在 for 循环中使用动态键值从 JSON 数组获取值?科特林的主要内容,如果未能解决你的问题,请参考以下文章

来自 intPtr 的 for 循环,如何?

如何在JSON格式的android动态键值对中动态获取输入数据

根据特定值从数组中选择项目

我应该将 let 值从 for 循环中取出以获得更好的性能吗?

PHP如何快速取出JSON的指定键值?

如何使用ajax将从jquery for循环创建的输入值发送到php [重复]