Javascript JSON的正确语法是什么?

Javascript JSON的正确语法是什么?,javascript,json,Javascript,Json,我正在学习JSON,但提供了关于语法的不同信息 我不知道哪一个是正确的 根据微软的说法 JSON: {firstName: "Rick", lastName: "Delorme", hairColor: "brown", eyeColor: "brown" } 同样根据Microsoft选项D.是正确的JSON语法 根据w3School 这是JSON { "name":"John" } 这是java脚本对象 {firstName: "Rick", lastName: "Delorme",

我正在学习JSON,但提供了关于语法的不同信息

我不知道哪一个是正确的

根据微软的说法

JSON:

 {firstName: "Rick", lastName: "Delorme", hairColor: "brown", eyeColor: "brown" }
同样根据Microsoft选项D.是正确的JSON语法

根据w3School

这是JSON

{ "name":"John" }
这是java脚本对象

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

W3Schools定义的语法,即
{“name”:“John”}
是正确的语法。您可以通过验证任何JSON。尝试尝试两者。

W3school的格式是编写JSON的正确格式! 如果您只想在JSON中传递一个参数,那么您将使用

{"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
   }
}

W3School语法正确。

尝试使用验证json,根据w3 schools,正确的语法是{“name”:“John”}

也看看这个。它可能会有帮助

阅读w3schools的内容,您将了解JSON和JavaScript对象的区别

MSDN的链接,您可以在其中验证Microsoft的JSON语法

JSON语法是JavaScript语法的一个子集

JSON语法规则

JSON语法源自JavaScript对象表示法语法:

  • 数据以名称/值对形式存在
  • 数据用逗号分隔
  • 花括号用于固定对象
  • 方括号表示数组
JSON名称需要双引号。JavaScript名称不需要。

在JSON中,键必须是字符串,用双引号书写: {“姓名”:“约翰”}


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

简单的回答是,这些都遵循相同的核心格式,但有一个区别——JSON在名称周围使用双引号,而JavaScript没有。您所列出的格式规范的区别在于,在JSON对象名称/值对的名称部分周围使用了双引号(“)

官方文档没有明确指出名称/值对的名称部分必须用引号括起来。请参阅更简短的摘要。然而,JSON明确指出,JSON中的对象表示法是通过在冒号前指定字符串和冒号后指定值来定义的(构成名称/值对),这两个部分都用花括号括起来:

对象结构表示为一对花括号标记 围绕零个或多个名称/值对。名称是字符串。A 每个名称后面都有一个冒号标记,将名称与 值(再次,从)

本规范进一步详细说明了:

字符串是用引号括起来的Unicode代码点序列 标记

因为对象的定义是一个名称/值对,其中

“名称是一个字符串”(同一文件第6节)

可以推断,在引用JSON(尽管不是JavaScript)时,名称应该始终用引号封装

JSON本身的字面意思是“JavaScript对象表示法”,这意味着它的起源在许多JavaScript使用范围内。在JavaScript本身中,这是:

{ name: "value portion" }
实际上相当于:

{ "name": "value portion" }
始终假设在JavaScript中编码时这是一个好的实践,问题在于JSON字符串/对象的名称/值对的名称部分可能包含空格,例如

{ "name portion": "value portion" }
在这种情况下,以下内容在语法上是不正确的:

{ name portion: "value portion" }
出于这个原因,许多编程JavaScript的人选择总是在name/value对象的name部分使用双引号,以便在构建或使用期间保持与JSON对象的兼容性。

以防万一

{
name:"Rishabh"}

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

希望你能理解在键/值对中使用双引号的意义相关:是的,我注意到在我发表评论之后。我编辑了这篇文章以使链接更加突出。FWIW,官方网站有一些例子:。微软的例子是错误的,W3School的例子是正确的。Javascript的例子是一个对象类型,因此你可以设置它您希望它是一个对象,而不是一个实际的json。来自Microsoft的问题似乎是错误的“选项是JavaScript对象,或者至少你可以说选项D更接近正确的JSON语法,因为JSON和JavaScript对象非常相似。我在回答中提到了细节。实际的JSON是W3Schools格式。不,Microsoft的示例不正确。在JSON中,键必须是字符串(即引号)。我给出的示例是正确的!!在rush中,我没有检查多个值是否不在另一个字符串中!@FelixKling thanx纠正我的错误“{firstName:“Rick”,lastName:“Delorme”,hairColor:“brown”,eyeColor:“brown”}表示多个参数”不是有效的JSON。您声称“这两种格式都是编写JSON的正确格式”,这是错误的。@FelixKling根据Kim Gentes的回答,这两种语法都是有效的,是真的吗?我仍然不是clear@UmangPatwa:那么,这个答案是错误的。请看上的规范。很明显,键必须用引号括起来。要清楚,您询问的是JSON。JavaScript对象文字看起来非常相似(因为JSON基于该语法),但完全不同。同样根据W3Schools,针对不同的数据类型更正JSON:{“name”:“John”,“age”:31,“city”:“New York”}。您也可以参考:“Microsoft选择公开一个事实,即几乎100%的JSON解析器都会合理地将名称/值对的名称部分限定为有效标记,只要它不包含空格。”这是错误的。如果您尝试
JSON.parse(“{foo:42}”),就会出现错误
在每个浏览器中。谢谢@FelixKling。我已经更新了我的帖子,因为它不仅部分不准确