You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何通过循环遍历JSON数组拼接打印item_size的键值对

问题根因

你当前的实现存在两个核心问题:

  • 代码冗余:重复初始化了两次JSONObject、JSONArray的获取逻辑
  • 赋值覆盖:每次循环都直接给itemsizename.text赋新值,新值会完全覆盖上一次循环的结果,因此最终只能展示数组最后一项的内容
  • 缺少结果累积:没有在循环外定义可复用的存储容器,无法跨循环累积所有元素的拼接内容
修复实现

方案1:基于现有原生JSONObject逻辑修改

核心思路是在循环外提前定义可变字符串容器,循环内逐次追加每一项的内容,全部遍历完成后再把最终拼接的结果赋值给控件。
修改后代码:

val obj = JSONObject(json)
val resultObject = obj.getJSONObject("result")
val itemSizeArray = resultObject.getJSONArray("item_size")
// 用StringBuilder存储拼接结果,字符串拼接性能更优
val sizeBuilder = StringBuilder()

for (i in 0 until itemSizeArray.length()) {
    val sizeItem = itemSizeArray.getJSONObject(i)
    val name = sizeItem.getString("name")
    val value = sizeItem.getString("value")
    // 非第一个元素前增加要求的分隔符 "/ "
    if (i != 0) {
        sizeBuilder.append("/ ")
    }
    sizeBuilder.append("$name:$value")
}
// 遍历完成后统一给控件赋值
itemsizename.text = sizeBuilder.toString()

该逻辑会自动适配item_size数组的长度,后续数组新增任意数量的元素都不需要修改代码,最终输出格式与要求的Height:29cm/ Width:52cm完全一致。

方案2:基于已定义的模型类实现(更简洁可维护)

你已经根据JSON结构定义好了对应的数据类,完全可以借助Gson、Moshi这类序列化工具直接将JSON转为实体对象,不需要手动逐字段解析,后续维护成本更低。
以Gson实现为例:

// 直接将JSON反序列化为提前定义好的Json3实体对象
val response = Gson().fromJson(json, Json3::class.java)
// 用Kotlin集合扩展方法自动完成全量元素拼接
val sizeText = response.result.item_size.joinToString("/ ") { size ->
    "${size.name}:${size.value}"
}
itemsizename.text = sizeText
  • joinToString方法会自动按照指定分隔符拼接列表所有元素,不需要手动判断循环下标、处理首尾多余的分隔符
  • 完全适配item_size的元素数量,后续新增任意尺寸字段,代码无需任何修改即可自动展示

内容的提问来源于stack exchange,提问作者sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 04:15:09