JSONArray 只有 returns 1 放?

JSONArray only returns 1 put?

我有一个函数 returns 一个 JSON 对象

private JSONObject retrieveData()
{
    JSONObject json = new JSONObject();

    json.put("Country", "Ireland"); 
    json.put("Capital", "Dublin"); 
    json.put("Country", "Spain");
    json.put("Capital", "Madrid");
    json.put("Country","France");
    json.put("Capital", "Paris");   


    JSONArray ja = new JSONArray();
    ja.put(json);

    JSONObject mainObj = new JSONObject();
    mainObj.put("places", ja);

    return mainObj;
}

我的输出是 { "places":[ { "Country": "France", "Capital": "Paris" } ] }

为什么没有将所有 .put 添加到 mainOBj,谢谢


谢谢伊沃的回答 我刚刚在这里尝试了您的解决方案

private JSONObject retrieveData()
{
    JSONObject json = new JSONObject();
    JSONArray ja = new JSONArray();

    json.put("Country", "Ireland");
    json.put("Capital", "Dublin");
    ja.put(json);

    json.put("Country", "Spain");
    json.put("Capital", "Madrid");
    ja.put(json);

    json.put("Country","France");
    json.put("Capital", "Paris");
    ja.put(json);

    JSONObject mainObj = new JSONObject();
    mainObj.put("places", ja);

    //json.accumulate("places", list);
    return mainObj;
}

虽然追加了 3 个对象,但出现了同样的问题
他们是一样的 :-/ {"places": [ {"Country":"France","Capital":"Paris"}, {"Country":"France","Capital":"Paris" },{"Country":"France","Capital":"Paris"}]}

put 所做的是将 key(第一个参数)设置为 value(第二个参数)。因此,首先将 json.Country 设置为爱尔兰,将 json.Capital 设置为都柏林。接下来,您覆盖 json.Country并将其设置为西班牙,并继续这样做,直到最后国家和首都被覆盖为法国和巴黎。

不是为每个 Country/Capital 对调用 JSONObject 上的 put,您应该为每个对对 JSONarray 调用 put

正如评论中指出的那样,确保每次分配数据之前都创建一个新的JSONObject

private JSONObject retrieveData()
{
    // Make sure to declare both the JSONObject and JSONArray first!
    JSONObject json = new JSONObject();
    JSONArray ja = new JSONArray();

    // This creates one object for the Ireland/Dublin pair
    json.put("Country", "Ireland");
    json.put("Capital", "Dublin");

    // This appends above object (Ireland/Dublin pair) to the JSONArray
    ja.put(json);

    // Now repeat the above lines for each pair:
    json = new JSONObject();
    json.put("Country", "Spain");
    json.put("Capital", "Madrid");
    ja.put(json);

    json = new JSONObject();
    json.put("Country","France");
    json.put("Capital", "Paris");
    ja.put(json);

    // Finally, declare the main object and set the key "places" to
    // the array holding each pair
    JSONObject mainObj = new JSONObject();
    mainObj.put("places", ja);

    return mainObj;
}