如何在Java中从JSON响应的JSONArray提取指定属性值?
解决方案
你可以通过判断每个dimensions元素中的键名,分别提取time和Azure-Services数组,再遍历数组获取目标属性值。以下是完整的代码实现:
JSONObject jsonObj = new JSONObject(reportData); JSONArray dimensionsArr = jsonObj.getJSONArray("dimensions"); for (int i = 0; i < dimensionsArr.length(); i++) { JSONObject dimensionObj = dimensionsArr.getJSONObject(i); // 处理time数组,提取name属性 if (dimensionObj.has("time")) { JSONArray timeArr = dimensionObj.getJSONArray("time"); System.out.println("=== Time数组的name值 ==="); for (int j = 0; j < timeArr.length(); j++) { JSONObject timeItem = timeArr.getJSONObject(j); String name = timeItem.getString("name"); System.out.println(name); } } // 处理Azure-Services数组,提取label属性 if (dimensionObj.has("Azure-Services")) { JSONArray azureServicesArr = dimensionObj.getJSONArray("Azure-Services"); System.out.println("=== Azure-Services数组的label值 ==="); for (int k = 0; k < azureServicesArr.length(); k++) { JSONObject serviceItem = azureServicesArr.getJSONObject(k); String label = serviceItem.getString("label"); System.out.println(label); } } }
关键步骤说明:
- 区分数组类型:用
has()方法检查当前dimension对象的键,判断是time还是Azure-Services数组。 - 遍历子数组:针对每个目标数组,嵌套循环遍历内部的每个对象。
- 提取目标属性:调用
getString()直接获取属性值;若属性可能为null,可改用optString()避免抛出异常。
输出示例:
=== Time数组的name值 === total 2022-01 2022-02 2022-03 === Azure-Services数组的label值 === Total Marketplace Marketplace Storage Other
内容的提问来源于stack exchange,提问作者rsharma
相关产品推荐
相关产品推荐

