首页 > 解决方案 > JSON.simple - 如何正确访问嵌套的 JSON 对象

问题描述

我的 json 文件的示例是

{
  "collection": [
    {
      "trophy-name": {
        "text": "swimming",
        "text2": "fast swimming"
      },
      "length": "50m",
      "pool": "outside",
      "weather": "20"
    }
  ]
}

现在我能够从长度、游泳池和天气中获得价值。但我被困在如何访问嵌套数组嵌套对象trophy-name上。

我的代码是:

public class main {
    
    public static void main(String[] args) throws FileNotFoundException, IOException, ParseException
    {         

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(new FileReader("..."));   // json path
        JSONObject jsonObject = (JSONObject) obj;           
        JSONArray array = (JSONArray) jsonObject.get("collection"); 
 
        for (Object number : array ) 
        {
            JSONObject testObj = (JSONObject) number;   

            String pool = (String)testObj.get("pool");

            System.out.println(testObj.get("length"));
            System.out.println(pool);
            System.out.println(testObj.get("weather"));         
        }           
    }   
}

这是我第一次尝试使用 json 文件,所以我正在尝试使用它,所以代码不是很好。

我可能必须创建新对象

JSONObject trophyObj = (JSONObject) jsonObject.get("trophy-name");

然后从那里我应该能够得到这个文本?

String troph = (String) trophyObj.get("text");

即使我是正确的,我也不确定如何将它实现到循环中,或者是否有更好的方法来执行循环?不要介意以不同的方式重做代码,任何建议表示赞赏。

标签: javajsonparsingsimplejson

解决方案


是的,你是对的,只需提取JSONObject循环内的内容,然后获取所需的字段。

public class main {

    public static void main(String[] args) throws FileNotFoundException, IOException, ParseException
    {

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(new FileReader("..."));   // json path
        JSONObject jsonObject = (JSONObject) obj;
        JSONArray array = (JSONArray) jsonObject.get("collection");

        for (Object number : array )
        {
            JSONObject testObj = (JSONObject) number;

            String pool = (String)testObj.get("pool");
            System.out.println(testObj.get("length"));
            System.out.println(pool);
            System.out.println(testObj.get("weather"));

            JSONObject trophyObj = (JSONObject) testObj.get("trophy-name");
            System.out.println((String)trophyObj.get("text"));
            System.out.println((String)trophyObj.get("text2"));
        }
    }
}

推荐阅读