我有一个返回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”:“巴黎“}]}
答案 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;
}