如何从JSON数组的不同JSON对象中提取name值并展示到同一个TextView中
实现方案
首先你提供的示例JSON存在语法问题,先给出修正后的合法JSON结构:
{ "item": [ { "item_id": 1, "add_on": [ { "name": "Thin Crust" }, { "name": "Extra Cheese" }, { "name": "Extra Sauce" } ] } ] }
以下是Android平台两种常见的实现方式:
方式一:使用系统原生org.json解析(无额外依赖)
Kotlin代码
try { // jsonStr为你拿到的原始JSON字符串 val rootJson = JSONObject(jsonStr) val itemArray = rootJson.getJSONArray("item") val firstItem = itemArray.getJSONObject(0) val addOnArray = firstItem.getJSONArray("add_on") val nameList = mutableListOf<String>() for (i in 0 until addOnArray.length()) { nameList.add(addOnArray.getJSONObject(i).getString("name")) } // 可按需修改分隔符,比如换成逗号、换行符都可以 val result = nameList.joinToString("、") // 赋值给TextView targetTextView.text = result } catch (e: JSONException) { // 解析异常处理,可设置默认提示 targetTextView.text = "暂无附加配置" }
Java代码
try { JSONObject rootJson = new JSONObject(jsonStr); JSONArray itemArray = rootJson.getJSONArray("item"); JSONObject firstItem = itemArray.getJSONObject(0); JSONArray addOnArray = firstItem.getJSONArray("add_on"); List<String> nameList = new ArrayList<>(); for (int i = 0; i < addOnArray.length(); i++) { nameList.add(addOnArray.getJSONObject(i).getString("name")); } StringBuilder resultBuilder = new StringBuilder(); for (int i = 0; i < nameList.size(); i++) { resultBuilder.append(nameList.get(i)); if (i != nameList.size() - 1) { resultBuilder.append("、"); } } targetTextView.setText(resultBuilder.toString()); } catch (JSONException e) { e.printStackTrace(); targetTextView.setText("暂无附加配置"); }
方式二:Gson解析(适合大型项目,需引入Gson依赖)
先定义对应实体类:
data class AddOn(val name: String) data class Item(val item_id: Int, val add_on: List<AddOn>) data class RootData(val item: List<Item>)
解析代码:
val rootData = Gson().fromJson(jsonStr, RootData::class.java) val nameList = rootData.item.firstOrNull()?.add_on?.map { it.name } ?: emptyList() targetTextView.text = nameList.joinToString("、")
注意事项
- 如果item数组存在多个元素,遍历整个item数组收集所有add_on的name即可
- 必须添加异常捕获逻辑,避免JSON字段缺失、格式错误导致崩溃
内容的提问来源于stack exchange,提问作者Salman Afzal
相关产品推荐
相关产品推荐

