如何使用Java遍历嵌套JSON数据并提取指定字段值
解决嵌套JSON遍历与字段提取问题
你原代码的问题是跳过了最外层的svc数组——你的目标字段都嵌套在svc数组的元素里,直接从根对象取mkDetails肯定拿不到正确的数据。下面是修正后的完整代码,包含提取Alpha、Beta和Gaama(注意JSON里字段名是Gaama而非你注释里写的Gamma)的逻辑:
import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONParser; import java.io.FileReader; import java.io.File; public class JsonParserExample { public static void main(String[] args) { try { // 解析JSON文件 Object jsonObj = new JSONParser().parse(new FileReader(new File("C:\\Users\\abc\\Documents\\file.json"))); JSONObject root = (JSONObject) jsonObj; // 获取svc数组(这是你原代码漏掉的关键步骤) JSONArray svcArray = root.getJSONArray("svc"); // 示例JSON里svc数组只有一个元素,直接取第一个 JSONObject svcItem = svcArray.getJSONObject(0); // 提取mkDetails里的Alpha和Beta JSONArray mkDetailsArray = svcItem.getJSONArray("mkDetails"); JSONObject mkDetailsItem = mkDetailsArray.getJSONObject(0); String alpha = mkDetailsItem.getString("Alpha"); String beta = mkDetailsItem.getString("Beta"); // 提取mNetDetails里的Gaama JSONArray mNetDetailsArray = svcItem.getJSONArray("mNetDetails"); JSONObject mNetDetailsItem = mNetDetailsArray.getJSONObject(0); String gaama = mNetDetailsItem.getString("Gaama"); // 打印结果 System.out.println("Alpha: " + alpha); System.out.println("Beta: " + beta); System.out.println("Gaama: " + gaama); } catch (Exception e) { e.printStackTrace(); } } }
关键点说明:
- 必走的svc数组环节:所有业务数据都包裹在
svc数组中,这是你之前代码缺失的核心步骤,必须先拿到这个数组才能继续向下遍历。 - 数组元素处理:示例里
svc、mkDetails、mNetDetails都是数组,假设每个数组只有一个元素所以直接取索引0;如果数组可能有多个条目,你可以用循环遍历:for (int i = 0; i < svcArray.length(); i++) { JSONObject svcItem = svcArray.getJSONObject(i); // 重复后续的字段提取逻辑即可 } - 字段名严格匹配:JSON里的字段是
Gaama,必须和代码里的调用严格一致,否则会抛出JSONException。
这样就能正确获取到你需要的所有字段值啦!
内容的提问来源于stack exchange,提问作者Vermax
相关产品推荐
相关产品推荐

