2

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

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

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

结果是:

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

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

4

3 回答 3

9

您需要创建一个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"]}
于 2012-07-02T16:20:46.643 回答
2

这很奇怪,因为API 说明了以下内容

将值附加到键下的数组中。如果 中不存在该 JSONObject键,则将该键放入 中JSONObject,其值为 JSONArray包含 value 参数的 a。如果键已与 a 关联JSONArray,则将 value 参数附加到它。

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

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

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

于 2013-05-15T07:50:59.097 回答
0

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

于 2018-03-19T14:57:25.680 回答