JSONArray只返回1个put?

时间:2015-01-26 13:24:16

标签: arrays json jsonobject

我有一个返回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;
}

我的输出是       {       “地方”:[         {             “国家”:“法国”,             “资本”:“巴黎”         }     ] }

为什么不是所有.put都添加到mainOBj,谢谢


感谢Ivo的回答 我刚试过你的解决方案

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个对象 他们是一样的 :-/     { “地方”:     [     {“Country”:“France”,“Capital”:“Paris”},{“Country”:“France”,“Capital”:“Paris”},{“Country”:“France”,“Capital”:“巴黎“}]}

1 个答案:

答案 0 :(得分:1)

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

不是在每个国家/资本对的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;
}