如何解析嵌套JSON Array并提取数值填充到Android Spinner控件
解决步骤
首先明确你拿到的嵌套结构层级:
- 最外层是长度为1的
JSONArray - 取出外层数组第0位的
JSONObject,取key为NVAKSINATOR的value,这个值是转义后的字符串格式的内层JSONArray - 把这个字符串转成内层
JSONArray,遍历取每个元素的NVAKSINATOR值即可得到你要的数值
原生org.json实现代码(Android系统自带,无需额外依赖)
// 1. 先拿到你从Activity A接收到的外层JSONArray,假设叫receivedJsonArray try { // 2. 取外层数组第一个对象,拿到字符串格式的内层JSON数组 JSONObject outerObj = receivedJsonArray.getJSONObject(0); String innerJsonStr = outerObj.getString("NVAKSINATOR"); JSONArray innerJsonArray = new JSONArray(innerJsonStr); // 3. 遍历内层数组提取数值,存到列表给Spinner用 List<String> spinnerData = new ArrayList<>(); for (int i = 0; i < innerJsonArray.length(); i++) { JSONObject innerObj = innerJsonArray.getJSONObject(i); String value = innerObj.getString("NVAKSINATOR"); spinnerData.add(value); } // 4. 填充到Spinner ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerData); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); yourSpinner.setAdapter(adapter); } catch (JSONException e) { e.printStackTrace(); // 可自定义异常处理逻辑,比如提示用户数据解析失败 }
优化建议
- 该嵌套结构本质是Activity A传递数据环节的冗余封装导致的:大概率是你在A中把目标JSONArray转成字符串后,又塞进了带
NVAKSINATOR键的对象,再封装到数组传递才会生成该结构。如果可以修改A的传递逻辑,直接把目标JSONArray转成字符串通过Intent的putExtra传递,可省去外层解析步骤。 - 如果需要对提取到的数值做计算操作,可把
getString替换为getInt/getLong,存储到对应数字类型的列表即可。
内容的提问来源于stack exchange,提问作者Irfan Ahmadi
相关产品推荐
相关产品推荐

