文档章节

您可以在JSON对象中使用结尾逗号吗?

 技术盛宴
发布于 02/20 11:16
字数 717
阅读 174
收藏 0

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

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

给你一个像

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

可以吗?


#1楼

JavaScript中允许使用逗号结尾,但在IE中则不起作用。 道格拉斯·克罗克福德(Douglas Crockford)的无版本JSON规范不允许它们使用,并且由于它是无版本的,因此不应更改。 ES5 JSON规范允许它们作为扩展,但是Crockford的RFC 4627不允许,并且ES5恢复为不允许它们。 Firefox也效仿。 Internet Explorer是我们不能拥有美好事物的原因。


#2楼

不能。JSON规范(在http://json.org上维护)不允许尾随逗号。 据我了解,某些解析器在读取JSON字符串时可能会静默允许它们,而其他解析器则会抛出错误。 为了实现互操作性,您不应将其包括在内。

上面的代码可以进行重组,以在添加数组终止符时删除结尾的逗号,或者在项目前添加逗号,而跳过第一个逗号。


#3楼

不幸的是,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时,我使用的另一种替代方法是始终在每个条目之后添加一个逗号(如您在上面所做的那样),然后在没有尾随逗号的末尾添加一个虚拟条目(但是那只是懒惰;->)。

不幸的是,不适用于数组。


#4楼

有趣的是,C和C ++(以及我认为的C#,但我不确定)都明确允许尾随逗号-正是由于给定的原因:它使以编程方式生成列表更加容易。 不确定为什么JavaScript没有遵循他们的领导。


#5楼

PHP编码人员可能想签出implode() 。 这需要一个数组使用字符串将其连接起来。

文档 ...

$array = array('lastname', 'email', 'phone');
echo implode(",", $array); // lastname,email,phone

本文转载自:https://stackoom.com/question/qUY/您可以在JSON对象中使用结尾逗号吗

粉丝 0
博文 1618
码字总数 0
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

NPM酷库044:json5,更可读的JSON

NPM酷库,每天两分钟,了解一个流行NPM库。· JSON是JS中数据交换时最常用的数据格式,其序列话和反序列化性能非常好,但是其语法却比较严格,比如以下是一个合法的JS声明,却不是一个合法的...

脉冲云_梁兴臣
2019/09/29
0
0
JSON改进版--JSON5

JSON 是很严格的,主键必须在引号中,字符串必须用双引号,对象和数组不能有逗号结尾,不能有注释。这些在过去都是必须的,但是随着支持 ECMAScript 5 的浏览器引擎的出现,例如 V8,这些限制...

匿名
2012/05/28
1W
1
无限递归与Jackson JSON和Hibernate JPA问题

当尝试将具有双向关联的JPA对象转换为JSON时,我不断 我所发现的只是该线程 ,基本上以建议避免双向关联为结尾。 有谁知道这个春季错误的解决方法? ------编辑2010-07-24 16:26:22 -------...

javail
02/14
23
0
为您的 web 项目构建一个简单的 JSON 控制器

无论您的项目使用的是哪种数据库后端,JavaScript Object Notation (JSON) 控制器都能简化您的开发工作。本文将带领您建立一个能够增强您的下一个开发项目的非常基础的 JSON 控制器。 您的下...

IBMdW
2011/06/21
394
1
python学习——函数strip() 与 split()

strip方法 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符 s.rstrip(rm)...

Oo熊小猫oO
2016/05/09
38
0

没有更多内容

加载失败,请刷新页面

加载更多

[ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?

昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好...

osc_n0c6719w
23分钟前
26
0
团队作业第三次—项目需求分析

这个作业属于哪个课程 2020春|S班 (福州大学) 这个作业要求在哪里 团队作业第三次—项目需求分析 团队名称 如果有一天我变得很有钱 这个作业的目标 1.原型设计、2.类图设计、3.需求规格说明书...

osc_bcvwusz2
25分钟前
23
0
流媒体服务器、海康威视 大华摄像头实现视频监控、直播解决方案

  随着互联网+物联网进程的加快,视频监控应用领域变得越来越广泛,其中海康威视 大华等品牌的摄像头频繁出现在视野中。由于去年也实现过智慧工地项目上的视频监控方案,加上当今直播趋势不...

osc_47qtuhkb
27分钟前
16
0
流媒体服务器、海康威视 大华摄像头实现视频监控、直播解决方案

  随着互联网+物联网进程的加快,视频监控应用领域变得越来越广泛,其中海康威视 大华等品牌的摄像头频繁出现在视野中。由于去年也实现过智慧工地项目上的视频监控方案,加上当今直播趋势不...

osc_1qix3fyb
27分钟前
29
0
thymeleaf中使用javascript中的[[]]的3种处理方式

thymeleaf中使用javascript中的[[]]的处理方式 1: 使用 CDATA 模式 /* <![CDATA[ */ 和 /* ]]> */就OK了 <script th:inline='javascript'>/* <![CDATA[ *//* ]]> */</script> 2:......

独钓渔
28分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部