JSONObject.append到对象 - 结果是嵌套数组?

时间:2012-07-02 16:02:50

标签: java json

以下代码生成一个嵌套数组,作为包含三个项的键的结果:

import org.codehaus.jettison.json.JSONObject;
// ...

JSONObject ret = new JSONObject();
for (Key key:keys) ret.append("blocked",key.id());

结果是:

{"blocked": [[["1"],"2"],"3"]}

这是预期的吗?如果是,我如何构建一个逐项添加的简单数组?

3 个答案:

答案 0 :(得分:7)

您需要创建一个JSONArray对象:

JSONObject ret = new JSONObject();
JSONArray arr = new JSONArray();
arr.put("1");
arr.put("2");
arr.put("3");
ret.put("blocked", arr);

结果是:

{"blocked":["1","2","3"]}

答案 1 :(得分:1)

这很奇怪,因为API says the following

  

在键下将值附加到数组。如果密钥不存在   JSONObject,然后将密钥放入JSONObject,其值为a   JSONArray包含value参数。如果钥匙已经存在   与JSONArray相关联,然后将value参数附加到它。

但它无法正常工作。当我这样做时:

JSONObject o = new JSONObject();
o.append("arr", "123");
o.append("arr", "456");

我得到一个例外,说“JSONObject[arr] is not a JSONArray”。看起来有一个错误。

答案 2 :(得分:-1)

我遇到了类似的问题。你应该使用 put 方法;不是追加方法。当然,您应该创建一个JSONArrray并将其用作 put 方法的第二个参数。