当手动生成JSON对象或数组时,通常更容易在对象或数组的最后一项上留下逗号。例如,从字符串数组输出的代码可能像这样(在c++中像伪代码):

s.append("[");
for (i = 0; i < 5; ++i) {
    s.appendF("\"%d\",", i);
}
s.append("]");

给你一个字符串

[0,1,2,3,4,5,]

这是允许的吗?


当前回答

我不会参加辩论俱乐部,我会坚持防御性编程的原则,将两种简单的技术结合起来,以简化与他人的接口:

作为一个接收json数据的应用程序的开发者,我可以很轻松地允许后面有逗号。 当开发一个编写json的应用程序时,我会严格地使用其他答案的聪明技巧之一,只在项目之间添加逗号,并避免后面的逗号。

还有更大的问题需要解决……

其他回答

不建议这样做,但您仍然可以执行类似这样的操作来解析它。

jsonStr = '[0,1,2,3,4,5,]'; 日期年份; eval('data = ' + jsonStr); 控制台.log(数据)

使用JSON5。不要使用JSON。

对象和数组可以以逗号结尾 如果对象键是有效的标识符,则可以不加引号 字符串可以使用单引号 字符串可以被分割成多行 数字可以是十六进制(以16为基数) 数字可以以小数点(前导或后导)开始或结束。 数字可以包括∞和-∞。 数字可以以显式的加号(+)开头。 内联(单行)和块(多行)注释都是允许的。

http://json5.org/

https://github.com/aseemk/json5

使用relax JSON,您可以使用后面的逗号,也可以不使用逗号。它们是可选的。

在解析类似json的文档时,完全没有必要使用逗号。

看一看relax JSON规范,你会发现原始JSON规范是多么“嘈杂”。太多的逗号和引号……

http://www.relaxedjson.org

您还可以使用这个在线RJSON解析器尝试您的示例,并查看它是否被正确解析。

http://www.relaxedjson.org/docs/converter.html?source=%5B0%2C1%2C2%2C3%2C4%2C5%2C%5D

我保持当前的计数,并将其与总计数进行比较。如果当前计数小于总计数,则显示逗号。

如果在执行JSON生成之前没有总计数,则可能无法工作。

同样,如果您使用的是PHP 5.2.0或更高版本,则可以使用内置的JSON API格式化响应。

不。在http://json.org中维护的JSON规范不允许后面有逗号。据我所知,一些解析器在读取JSON字符串时可能会默默地允许它们,而其他解析器则会抛出错误。对于互操作性,不应该包含它。

上面的代码可以重新构造,可以在添加数组结束符时删除后面的逗号,也可以在项之前添加逗号,对第一个项跳过逗号。