当手动生成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,]
这是允许的吗?
当前回答
由于for循环用于遍历数组或类似的可迭代数据结构,我们可以使用数组的长度,如下所示,
awk -v header="FirstName,LastName,DOB" '
BEGIN {
FS = ",";
print("[");
columns = split(header, column_names, ",");
}
{ print(" {");
for (i = 1; i < columns; i++) {
printf(" \"%s\":\"%s\",\n", column_names[i], $(i));
}
printf(" \"%s\":\"%s\"\n", column_names[i], $(i));
print(" }");
}
END { print("]"); } ' datafile.txt
datafile.txt包含,
Angela,Baker,2010-05-23
Betty,Crockett,1990-12-07
David,Done,2003-10-31
其他回答
我保持当前的计数,并将其与总计数进行比较。如果当前计数小于总计数,则显示逗号。
如果在执行JSON生成之前没有总计数,则可能无法工作。
同样,如果您使用的是PHP 5.2.0或更高版本,则可以使用内置的JSON API格式化响应。
有趣的是,C和c++(我认为还有c#,但我不确定)都特别允许后面有逗号——原因正是:它使以编程方式生成列表更容易。不知道为什么JavaScript没有效仿他们。
不幸的是,JSON规范不允许后面有逗号。有一些浏览器允许这样做,但通常需要考虑所有浏览器。
一般来说,我试图把问题转过来,在实际值之前添加逗号,所以你最终得到的代码看起来像这样:
s.append("[");
for (i = 0; i < 5; ++i) {
if (i) s.append(","); // add the comma only if this isn't the first entry
s.appendF("\"%d\"", i);
}
s.append("]");
在for循环中额外的一行代码并不昂贵……
当从某种形式的字典中将结构输出到JSON时,我使用的另一种替代方法是始终在每个条目后面附加一个逗号(正如您上面所做的那样),然后在末尾添加一个没有逗号的虚拟条目(但这只是懒惰;->)。
不幸的是,它不能很好地使用数组。
String l = "[" + List<int>.generate(5, (i) => i + 1).join(",") + "]";
使用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