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

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

import org.codehaus.jettison.json.JSONObject; // ... JSONObject ret = new JSONObject(); for (Key key:keys) ret.append("blocked",key.id()); 

结果是:

 {"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"]} 

这很奇怪,因为API说明如下 :

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

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

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

我得到一个exception,说“ JSONObject[arr] is not a JSONArray ”。 看起来有一个bug。

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