2011-06-27 17 views
2

我已經看到,有以下JSON教程:我應該使用字符串來分隔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對象表示法之間是否存在關係?

回答

3

你真的不得不在JSON中使用變量名的語音標記(如果你這樣做的話,我看到的例子不正確)。

是的。

JSON和JavaScript對象表示法之間是否存在關係?

是的。 JSON是JavaScript Object Notation的縮寫(但我不認爲這就是你的意思)。

JSON與JavaScript之間的關係是JSON(非常接近)是用於在JavaScript中創建文字的語法的子集子集

JSON被大量簡化,這使得手工操作稍微不方便(不要手動使用JSON,使用庫!),但使規格更小,解析器更容易編寫。

大部分簡化歸結爲異常被刪除。

例如:

在JavaScript中,對象文本密鑰可以是一個標識符(然後插入什麼使在JS這裏一個有效的標識符的詳細說明)或字符串。 在JSON中,對象鍵必須是一個字符串。

在JavaScript中,字符串可以用單引號或雙引號分隔。 在JSON中,一個字符串必須用雙引號分隔。

2

JSON要求用雙引號字符引用屬性名稱。對於JavaScript對象文字表達式,這種引用是而不是。在這方面,JSON比較嚴格。 JavaScript允許屬性名稱不帶引號如果它們採取有效標識符的形式,並且僅在它們不是保留字時。

JSON絕對是從JavaScript中的對象字面值語法派生而來的,但是(主要是爲了使解析更簡單一些)更嚴格。例如,JSON中的屬性值不能是函數。

+0

是的,這是真的@Gumbo - 我沒有清楚地表達自己。 – Pointy

+0

您好,'JavaScript允許屬性名稱如果採用有效標識符的形式'在代碼中是不加引號的? – Exitos

+0

@ Pete2k表示'{xyz:「hello world}}在JavaScript代碼中有效,但它不是有效的JSON。 – Pointy

1

如果您提到JSON as the data-interchange format,那麼是的,名稱需要正確引用。

如果您將「JSON」稱爲object syntax literal in JavaScript,則不需要轉義它們,除非它們是JavaScript中的關鍵字。

+0

「foo bar」不是關鍵字,但必須引用它才能將其用作關鍵字:)(因此,展示了JSON在這種情況下的簡單優勢,避免了另一個例外)。 – Quentin

+0

@Quentin:是的,確切的說,您需要說:「除非它們不是數字文字或不是保留關鍵字的標識符名稱」。 – Gumbo

相關問題