如何在 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 数组获取值?科特林的主要内容,如果未能解决你的问题,请参考以下文章
如何在JSON格式的android动态键值对中动态获取输入数据