Kotlin中如何逐个遍历JSON数组字段并获取对应值?
解决Kotlin中JSON数组元素逐个获取的问题
你的代码当前是将所有regDt值直接拼接成连续字符串,要逐个获取并处理这些结果,可通过以下几种方式实现:
1. 将结果存储到列表(推荐,便于后续灵活处理)
在循环外部定义一个列表,循环时将每个regDt存入列表,之后就能通过索引或遍历逐个访问:
val response = ... // 接口返回的字符串 val jsonObj = JSONObject(response) val jsonArray = jsonObj.optJSONArray("data") val regDtList = mutableListOf<String>() // 定义存储列表 if (jsonArray != null) { for (i in 0 until jsonArray.length()) { val jsonObject = jsonArray.getJSONObject(i) val regDt = jsonObject.optString("regDt") regDtList.add(regDt) // 将单个日期存入列表 } } // 逐个获取示例 regDtList.forEachIndexed { index, dt -> println("第${index+1}个日期:$dt") // 这里可以对单个日期进行自定义处理 }
2. 循环内直接处理单个元素
如果不需要保存所有结果,可在循环过程中直接处理每个regDt:
if (jsonArray != null) { for (i in 0 until jsonArray.length()) { val jsonObject = jsonArray.getJSONObject(i) val regDt = jsonObject.optString("regDt") // 直接处理当前regDt println("当前日期:$regDt") // 比如更新UI、存入数据库等操作 } }
3. 在TextView中分隔显示(保留拼接但区分元素)
如果只是希望在TextView里让各个日期分开显示,可在拼接时添加分隔符(如换行、逗号):
val startDateTV = StringBuilder() if (jsonArray != null) { for (i in 0 until jsonArray.length()) { val jsonObject = jsonArray.getJSONObject(i) val regDt = jsonObject.optString("regDt") startDateTV.append(regDt).append("\n") // 用换行分隔 // 或用逗号分隔:startDateTV.append(regDt).append(", ") } // 移除最后一个多余的分隔符(如果用逗号的话) if (startDateTV.isNotEmpty()) { startDateTV.deleteCharAt(startDateTV.length - 1) } startDate.text = startDateTV.toString() }
4. 用Gson解析为数据类(更优雅的JSON处理方式)
手动操作JSONObject容易出错,建议用Gson将JSON直接解析为数据类,之后直接操作列表元素:
首先定义对应的数据类:
data class HistoryItem( val status: String, val regDt: String, val seq: String ) data class HistoryResponse( val data: List<HistoryItem> )
然后替换原有的JSON解析逻辑:
val response = ... // 接口返回的字符串 val historyResponse = Gson().fromJson(response, HistoryResponse::class.java) val historyItems = historyResponse.data // 逐个处理元素 historyItems.forEach { item -> println("日期:${item.regDt},状态:${item.status}") } // 拼接为带分隔的字符串显示在TextView startDate.text = historyItems.joinToString("\n") { it.regDt }
内容的提问来源于stack exchange,提问作者andi azamuddin
相关产品推荐
相关产品推荐

