当手动生成JSON对象或数组时,通常更容易在对象或数组的最后一项上留下逗号。例如,从字符串数组输出的代码可能像这样(在c++中像伪代码):
s.append("[");
for (i = 0; i < 5; ++i) {
s.appendF("\"%d\",", i);
}
s.append("]");
给你一个字符串
[0,1,2,3,4,5,]
这是允许的吗?
当手动生成JSON对象或数组时,通常更容易在对象或数组的最后一项上留下逗号。例如,从字符串数组输出的代码可能像这样(在c++中像伪代码):
s.append("[");
for (i = 0; i < 5; ++i) {
s.appendF("\"%d\",", i);
}
s.append("]");
给你一个字符串
[0,1,2,3,4,5,]
这是允许的吗?
当前回答
尾随逗号在JavaScript中是允许的,但在IE中不允许。Douglas Crockford的无版本JSON规范不允许它们,因为它是无版本的,所以不应该改变。ES5 JSON规范允许它们作为扩展,但Crockford的RFC 4627不允许,ES5恢复为不允许。Firefox紧随其后。ie就是我们不能拥有美好事物的原因。
其他回答
有趣的是,C和c++(我认为还有c#,但我不确定)都特别允许后面有逗号——原因正是:它使以编程方式生成列表更容易。不知道为什么JavaScript没有效仿他们。
有一种可能的方法可以避免循环中的if分支。
s.append("[ "); // there is a space after the left bracket
for (i = 0; i < 5; ++i) {
s.appendF("\"%d\",", i); // always add comma
}
s.back() = ']'; // modify last comma (or the space) to right bracket
使用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
String l = "[" + List<int>.generate(5, (i) => i + 1).join(",") + "]";
根据我过去的经验,我发现不同的浏览器对JSON中尾随逗号的处理方式不同。
Firefox和Chrome都处理得很好。但是IE(所有版本)似乎都坏了。我的意思是真正的中断,停止阅读剩余的剧本。
记住这一点,并且考虑到编写兼容的代码总是很好的事实,我建议花费额外的精力确保没有尾随逗号。
:)