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

Java JSONObject.append到对象中-结果是嵌套数组吗?,java,json,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"]} {"blocked":["1","2","3"]} 这是预期的吗?如果是,如何构建一个逐项添加的普通数组

以下代码为包含三项的键生成嵌套数组:

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

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

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

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

您需要创建一个
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"]}
{"blocked":["1","2","3"]}
这很奇怪,因为:

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

但它不能正常工作。当我这样做时:

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

我得到一个异常,说“
JSONObject[arr]不是一个JSONArray
”。看起来好像有个bug。

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

这取决于您使用的库,您可以指定JSONObjectI的完整包名吗?我会说这更像是一个解决方法。正如Thomas所说,append函数应该做同样的事情,但要更加紧凑。