2017-02-09 182 views
1

我正在學習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://stackoverflow.com/q/2904131/218196) –

+0

是的,我注意到後,我評論。我編輯帖子,使鏈接更加突出。 –

+1

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

回答

1

的語法是正確的。您可以通過JSONLint驗證任何JSON。嘗試嘗試兩者。

+0

也根據W3Schools,正確的Json不同的數據類型: {「名稱」:「約翰」,「年齡」:31,「城市」:「紐約」}。 另外你可以參考:http://json.org/example.html –

1

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的正確格式」*,這是錯誤的。 –

0

W3School語法是正確的。

1

嘗試使用JSONLint來驗證你的json,正確的是{「name」:「John」}根據w3學校。

查看這個answer也可以。

0

閱讀w3schools的link,你會得到JSON和JavaScript對象的區別。

ThisMSDN在那裏你可以驗證微軟的的JSON語法的鏈接。

JSON語法是JavaScript語法的子集。

JSON語法規則

JSON語法從JavaScript對象符號語法導出:

  • 數據是名稱/值對
  • 數據由逗號
  • 大括號保持分離物體
  • 方括號保持陣列

JSON名稱需要雙引號。 JavaScript名稱不。

在JSON,鑰匙必須是字符串,用雙引號寫: { 「名」: 「約翰」}

在JavaScript中,鍵可以是字符串,數字或標識符名稱:{名稱:「John」}

+0

@Teemu:*「對象鍵名必須是字符串」*該陳述令人困惑。對象屬性名稱*是*字符串,在對象* literal *內使用字符串*文字*,數字*文字*和*標識符名稱*(以及計算屬性)是有效的,但這很正確。 –

+0

@FelixKling是的,你說得對,對我來說是不好的選擇。即使是一個函數引用也可以用作屬性名稱,它只是自動轉換爲字符串。 – Teemu

0

簡短的回答是,它們都遵循相同的核心格式,但有一個區別--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。我更新了我的帖子,因爲它不僅部分不準確,而且與我想要交流的內容混淆。感謝。 –

0

以防萬一

{ 
name:"Rishabh"} 

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

希望U將得到使用雙引號的鍵/值對