使用org.json在Java中创建JSON

9

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

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

我预期它会打印。
{"test":[]} 

当它打印时
{"test":[[]]}

这是一个简短的视频,演示如何使用org.json创建JSONObject。https://www.youtube.com/watch?v=-qEpxIARKxE - drorw
2个回答

10

不要使用 accumulate,而是使用 put。这样做它就不会把元素添加到已有的(或创建并添加到)JSONArray 中,而是作为一个键添加到 JSONObject 中,像这样:

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

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


4
那是因为在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(),以获得所需的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接