首页 > 解决方案 > 如何使用 Kotlin 中的循环从 JSON 数组打印键值?

问题描述

我正在使用一个 API,它给了我一个 JSON 响应。从这个 JSON 我创建了模型类。在这些课程中。这些是我的模型类:

class Json3(
    val result : Result3){}

class Result3(
    val pic1:String,
    val item_name:String,
    val shop_name: String,
    val item_size:List<ItemSize>,
    val item_description:String,
    val price:String ){}

class ItemSize(
    val name:String,
    val value:String){}

我想从项目大小访问名称和值并打印它们。我怎样才能通过循环实现这一点?这是我的 JSON:

{"result": {

"product_id": 283946,
"shop_rating": 5,
"shop_reviews_count": 476,
"occasion_id": 94,
"section_id": 1,
"section": "Flower",
"pickup": false,
"preparation_time": "0 mins",
"is_favorite": false,
"item_sold_by": "Quantity",

"item_size": [
  {
    "name": "Height",
    "value": "29cm"
  },
  {
    "name": "Width",
    "value": "52cm"
  }
]

从 item_size,我想访问这些值并在一些循环的帮助下打印这样的东西:高度:29 厘米/宽度:52 厘米。这是我到目前为止所尝试的。当我将其设置为 itemsizename 时,我只会得到姓氏和值。但我想要数组中的所有名称和值。例如:高度:29 厘米/宽度:52 厘米和长度(如果进一步可用)。

val obj = JSONObject(json)
                val getObject = obj.getJSONObject("result")
                val getArray = getObject.getJSONArray("item_size")
val obj = JSONObject(json)
                val getObject = obj.getJSONObject("result")
                val getArray = getObject.getJSONArray("item_size")
                for (i in 0 until getArray.length()) {
                    val objects: JSONObject = getArray.getJSONObject(i)
                   val     parameter = objects["name"].toString()
                  val   parameterValue = objects["value"].toString()
itemsizename.text = parameter + ": " + parameterValue }

标签: androidloopskotlin

解决方案


首先从响应 JSONObject 中获取 item_size JSONArray

val item_sizeJsonArray = resultObject.getJSONArray("item_size")

第 2 步: - 更新您的 Result3 类并让 item_size 成为列表而不是 Array

val item_size:List<ItemSize>, 

使用下面的 for 循环获取 ItemSize 列表,传递 item_sizeJsonArray

fun getItemSizeList(itemsJsonList:JSONArray): List<ItemSize> {
    val items: ArrayList<ItemSize> = ArrayList()
    for (i in 0 until itemsJsonList.length()) {
        val obj = itemsJsonList[i] as JSONObject
        val name: String = obj.getString("name")
        val value: String = obj.getString("value")
        val item = ItemSize(name, value)
        items.add(item)
    }
    return items
}

或者你可以使用 Gson

fun getItemSizeListWithGson(itemsJsonList: JSONArray): List<ItemSize> {
val items: ArrayList<ItemSize> = ArrayList()
for (i in 0 until itemsJsonList.length()) {
    val item = Gson().fromJson(itemsJsonList[i].toString(), ItemSize::class.java)
    items.add(item)
}
return items

}

普通 for 循环

 val item_sizeJsonArray = resultObject.getJSONArray("item_size")

    for (i in 0 until item_sizeJsonArray.length()) {
                val obj = item_sizeJsonArray[i] as JSONObject
                val name: String = obj.getString("name")
                val value: String = obj.getString("value")
               
            }

推荐阅读