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方法的第二个参数。