JSON的正确语法是什么?

问题描述:

我正在学习JSON,但Microsoftw3school提供了有关语法的不同信息。JSON的正确语法是什么?

我被卡住哪一个是正确的。

据微软

JSON:

{firstName: "Rick", lastName: "Delorme", hairColor: "brown", eyeColor: "brown" } 

而且根据微软的选项D.是正确的JSON语法 enter image description here

根据w3School

这是JSON

{ "name":"John" } 

这是W3Schools的即{ "name":"John" }定义的Java脚本对象

{firstName: "Rick", lastName: "Delorme", hairColor: "brown", eyeColor: "brown" } 
+0

相关的点:是什么JSON之间的差异对象文本符号?( http://*.com/q/2904131/218196) –

+0

是的,我注意到后,我评论。我编辑帖子,使链接更加突出。 –

+1

FWIW,官方网站有例子:http://json.org/example.html。 –

的语法是正确的。您可以通过JSONLint验证任何JSON。尝试尝试两者。

+0

也根据W3Schools,正确的Json不同的数据类型: {“名称”:“约翰”,“年龄”:31,“城市”:“纽约”}。 另外你可以参考:http://json.org/example.html –

W3school的格式是写入JSON的正确格式! 如果妳想要传递只有一个JSON参数,则U将使用

{"name":"John"} 

的多个参数它会像,

{ 
    "user1" : { 
     "name" : "mahesh", 
     "password" : "password1", 
     "profession" : "teacher", 
     "id": 1 
    }, 
    "user2" : { 
     "name" : "suresh", 
     "password" : "password2", 
     "profession" : "librarian", 
     "id": 2 
    }, 
    "user3" : { 
     "name" : "ramesh", 
     "password" : "password3", 
     "profession" : "clerk",  
     "id": 3 
    } 
} 
+1

不,微软的例子是不正确的。在JSON中,键必须是字符串(即引号)。 –

+0

我给出的例子是正确的!在急,我没有检查多个值不在另一个字符串! @FelixKling thanx纠正我 – Jaini

+2

*“{firstName:”Rick“,lastName:”Delorme“,hairColor:”brown“,eyeColor:”brown“}多个参数”*是无效的JSON。你声称*“这两个都是写入JSON的正确格式”*,这是错误的。 –

W3School语法是正确的。

尝试使用JSONLint来验证你的json,正确的是{“name”:“John”}根据w3学校。

查看这个answer也可以。

阅读w3schools的link,你会得到JSON和JavaScript对象的区别。

ThisMSDN在那里你可以验证微软的的JSON语法的链接。

JSON语法是JavaScript语法的子集。

JSON语法规则

JSON语法从JavaScript对象符号语法导出:

  • 数据是名称/值对
  • 数据由逗号
  • 大括号保持分离物体
  • 方括号保持阵列

JSON名称需要双引号。 JavaScript名称不。

在JSON,钥匙必须是字符串,用双引号写: { “名”: “约翰”}

在JavaScript中,键可以是字符串,数字或标识符名称:{名称:“John”}

+0

@Teemu:*“对象键名必须是字符串”*该陈述令人困惑。对象属性名称*是*字符串,在对象* literal *内使用字符串*文字*,数字*文字*和*标识符名称*(以及计算属性)是有效的,但这很正确。 –

+0

@FelixKling是的,你说得对,对我来说是不好的选择。即使是一个函数引用也可以用作属性名称,它只是自动转换为字符串。 – Teemu

简短的回答是,它们都遵循相同的核心格式,但有一个区别--JSON在名称周围使用双引号,而JavaScript不使用。在您列出的格式规范的区别是双引号(“)包围JSON对象名称/值对的名称部分。

官方ECMA JSON Data Interchange Format文件并说具体的演示文稿的名称部分名称/值对必须用引号括起来,参见http://json.org/以及更简洁的总结,但是JSON明确指出JSON中的对象表示法是通过指定一个字符串之前的值和一个冒号后的值来明确定义的构成名称/值对),并且这两个部分都被大括号包围:

对象结构表示为一对围绕零个或多个名称/值对的大括号标记 。名称是一个字符串。甲 单冒号标记如下每个名称,从 值分离的名称(再次,从ECMA JSON Data Interchange Format

该规范进一步细节:

字符串是包裹的Unicode代码点的序列用引号 马克

由于对象的非常定义是名称/值对,其中

“的名称是一个字符串”(同document第6)

,可以推断这个名字应该总是用双引号引用JSON封装时(虽然不是为JavaScript)。

JSON本身的字面意思是“JavaScript Object Notation”,这意味着它的起源在很多JavaScript的使用范围之内。在JavaScript本身,这样的:

{ name: "value portion" } 

几乎是相同的:

{ "name": "value portion" } 

总是具有假设,这是很好的做法在JavaScript编码时的问题是,名称/值的名称部分对JSON字符串/对象的可能可能包含空白,如

{ "name portion": "value portion" } 

在这种情况下,下面的将语法不正确:

{ name portion: "value portion" } 

出于这个原因,很多人编程的JavaScript选择始终使用的名称/值对象的名称部分周围的双引号,使其保持与施工或使用过程中JSON对象的兼容性。

+1

*“微软选择暴露这样的事实,即几乎100%的JSON解析器将合理地将名称/值对的名称部分限定为有效令牌,只要它不包含空格。”*这是错误的。如果您在每个浏览器中尝试使用'JSON.parse(“{foo:42}”)',您将会收到错误消息。 –

+0

谢谢@FelixKling。我更新了我的帖子,因为它不仅部分不准确,而且与我想要交流的内容混淆。感谢。 –

以防万一

{ 
name:"Rishabh"} 

Error: Parse error on line 1: 
{ name: "Rishabh"} 
--^ 
Expecting 'STRING', '}', got 'undefined' 

希望U将得到使用双引号的键/值对