8

我正在尝试使用 org.json 库在 java 中创建一个 json 字符串,以下是代码片段。

JSONArray jSONArray = new JSONArray();
JSONObject jSONObject = new JSONObject();
jSONObject.accumulate("test", jSONArray);
System.out.println(jSONObject.toString());

我希望它打印出来

{"test":[]} 

当它打印时

{"test":[[]]}
4

2 回答 2

10

而不是以这种方式accumulate使用put它;不会将其添加到预先存在的(或创建并添加)JSONArray,而是将其作为键添加到 JSONObject 中,如下所示:

JSONArray array = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("test", array);
System.out.println(obj.toString());

现在它会打印{"test":[]}

于 2013-04-29T05:37:13.947 回答
3

那是因为在accumulate方法中,

Object object = this.opt(key); //gets the key value. Null in your case.
if (object == null) {
    this.put(key,
        value instanceof JSONArray ? new JSONArray().put(value) : value);
}

这是按照 API 明确说明的(对于accumulate方法)-

在一个键下累积值。它类似于 put 方法,只是如果键下已经存储了一个对象,则在键下存储一个 JSONArray 以保存所有累积值。如果已经存在 JSONArray,则将新值附加到它。相反,put 方法替换了之前的值。如果只累积了一个不是 JSONArray 的值,那么结果将与使用 put 相同。但是如果多个值累加,那么结果会像 append 一样。

您可以put()按照其他答案中的说明使用,以获得所需的结果。

于 2013-04-29T05:52:45.247 回答