JSON.simple - 如何正确访问嵌套的 JSON 对象

JSON.simple - How to correctly access nested JSON objects

我的 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");

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

是的,你是对的,只需在循环中提取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"));
        }
    }
}