Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该使用字符串来分隔JSON中的对象名称吗?_Javascript_Json - Fatal编程技术网

Javascript 我应该使用字符串来分隔JSON中的对象名称吗?

Javascript 我应该使用字符串来分隔JSON中的对象名称吗?,javascript,json,Javascript,Json,我看过一个包含以下JSON的教程: { books:[{title:"frankenstein"},{title:"Moby Dick"}] } 当我把上面的代码放到js.bin中时,我得到一个错误,说它需要一个字符串并看到了一些书。所以我把它改成下面的,它可以工作 { "books":[{"title":"frankenstein"},{"title":"Moby Dick"}] } 但是,如果我将第一个代码段从上面改为下面,它就会工作 var p = { bo

我看过一个包含以下JSON的教程:

{

   books:[{title:"frankenstein"},{title:"Moby Dick"}]

}
当我把上面的代码放到js.bin中时,我得到一个错误,说它需要一个字符串并看到了一些书。所以我把它改成下面的,它可以工作

{

   "books":[{"title":"frankenstein"},{"title":"Moby Dick"}]

}
但是,如果我将第一个代码段从上面改为下面,它就会工作

var p = {

   books:[{title:"frankenstein"},{title:"Moby Dick"}]

};
我想知道的是:

1) 您真的必须在JSON中为变量名使用语音标记吗(如果这样做,我看到的示例是不正确的)。

2) JSON和javascript对象表示法之间有关系吗?

JSON要求属性名称用双引号字符引用。在JavaScript中,对象文字表达式不需要这种引用。在这方面,相比之下,JSON是严格的。如果属性名采用有效标识符的形式,JavaScript允许属性名不带引号,并且仅当属性名不是保留字时才允许

JSON肯定是从JavaScript中的对象文字语法派生出来的,但是(主要是为了使解析更简单)它更严格。例如,JSON中的属性值不能是函数

您真的必须在JSON中为变量名使用语音标记吗(如果这样做,我看到的示例是不正确的)

JSON和javascript对象表示法之间有关系吗

对。JSON是JavaScript对象表示法的缩写(但我不认为这是你的意思)

JSON和JavaScript之间的关系是,JSON(几乎)是用于在JavaScript中创建文本的语法的子集

JSON被大大简化了,这使得手工制作变得稍微不方便(不要手工制作JSON,使用库!),但使规范更小,解析器更容易编写

大多数简化都是由于删除了异常

例如:

在JavaScript中,对象文本键可以是标识符(然后在这里插入关于如何在JS中构成有效标识符的详细说明)或字符串。 在JSON中,对象键必须是字符串

在JavaScript中,字符串可以用单引号或双引号分隔。 在JSON中,字符串必须用双引号分隔。

如果您提到,那么是的,名称需要正确引用


如果你说“JSON”是,那么不,你不需要转义它们,除非它们是JavaScript中的关键字。

“foo-bar”不是关键字,但你必须引用它作为关键字:)(这表明了JSON在这个例子中的简单性优势,它避免了另一个例外)。@Quentin:Yes,准确地说,您需要说:“除非它们不是数字文字或不是保留关键字的标识符名称”。您好,‘如果属性名称采用有效标识符的形式,JavaScript允许属性名称不带引号’在代码中是什么意思?@Pete2k这意味着
{xyz:“hello world”}
在JavaScript代码中是有效的,但它不是有效的JSON。