2012-10-06 154 views
18

儘管有大量的谷歌搜索和頭髮拉動,但我不能爲我的生活闡述json,對象和數組之間的差異(在javascript中)。下面是我如何使用二維數據容器(害怕在這裏使用「數組」,「對象」或「json」)。請告訴我這兩個例子是什麼?javascript對象vs數組vs vs JSON

//first example: 
[ 
    {"record_id":1,"name":"Frank"}, 
    {"record_id":2,"name":"Sally"} 
] 

//second example: 
{ 
"countries": 
    [ 
    {"id":1,"name":"Canada"}, 
    {"id":2,"name":"Mexico"} 
    ], 
"states": 
    [ 
    "id":1,"name":"Maine"}, 
    {"id":2,"name":"Alaska"} 
    ] 
} 
+0

JSON是按照符合JSON規範要求的字符序列布置的UTF-8編碼文本數據。它的創建方式沒有區別。重要的是你最終得到UTF-8數據。 –

+0

@ user1689607 Nit:[JSON](http://www.json.org/)不*指定UTF編碼(但它確實需要Unicode) - UTF-X就是Unicode如何映射到八位位組,並且此編碼獨立於JSON發生。否則,是的:JSON是*序列化*格式。 – 2012-10-06 22:22:39

+0

* default *編碼:-)但是,服務器可以自由發送JSON作爲UTF-16(或甚至UCS-2 ..也許?)以及適當的協商/頭文件。 – 2012-10-06 22:28:32

回答

49

JSON是數據結構的表示,它不是一個對象或數組。

[1,2,3] 

是一個數組。

{"foo":"bar"} 

是一個對象。

在你的榜樣,

[ 
    {"record_id":1,"name":"Frank"}, 
    {"record_id":2,"name":"Sally"} 
] 

是對象的數組。

{ 
    "countries": 
    [ 
     {"id":1,"name":"Canada"}, 
     {"id":2,"name":"Mexico"} 
    ], 
    "states": 
    [ 
     {"id":1,"name":"Maine"}, 
     {"id":2,"name":"Alaska"} 
    ] 
} 

是一個包含其他數組和對象的對象。

+0

謝謝,加里。這是迄今爲止我所遇到的最清晰的解釋。欣賞它。 – Octavient

0

嗯,我相信對象可以有方法和屬性,而陣列不能。 JSON可以傳遞給服務器,而陣列是不能忽視的,除非你把它作爲由POST

+0

這個答案可能會讓人困惑。 JSON可以對可以傳遞給服務器的數組進行編碼,就像JSON可以對可以傳遞給服務器的對象進行編碼一樣。另外,JSON對象不能有方法,因爲JSON不是腳本或編程語言(它是一種數據交換格式)。 – CristosLC

5

字符串可以使用{括號}申報對象字面

您可以使用[方括號]來聲明數組字面

對象是鍵名稱值對的集合。

下面是一個字符串數組的一個示例:

var a = [ "one", "two", "three" ]; 

下面是一個簡單對象,它表示一個人的例子:

var personObject = { 
    name: 'Joe', 
    age: 25, 
    hometown: 'New York'   
}; 
7

JSONJavaScript Object Notation。這只是寫下JavaScript數據類型的一種方式。它本身不是一種數據類型。

請參閱下面的JavaScript數據類型的一些示例以及創建它們的文字符號。

例如,JSON可用於將數據從服務器發送到瀏覽器,因爲JavaScript可以輕鬆解析爲普通的JavaScript數據結構。

在您的示例中,您使用的是對象列表和對象對象。

這是一個3個空對象的列表。

[{}, {}, {}] 

這是三個簡單的記錄列表:

var mylist = [ 
    {name: 'John', age: 24}, 
    {name: 'Bill', age: 42}, 
    {name: 'Jill', age: 18}, 
    ] 

您可以像這樣訪問:

mylist[1].name 
>>> 'Bill' 

mylist[2].age 
>>> 18 

JavaScript有幾種數據類型:

1 
100 
-2000 
123.45 

字符串

"Hi John" 
"Message:\nGo Forth" 

布爾

true 
false 

陣列

[1,2,3] 
[] 
["a", "b", 123] 
["a", "b", 123, [3,4,5]] 

對象

{} 
{a: 10} 
{mylist: [1,2,3], yourlist: [4,5,6]} 
{myself: {name: 'me', age: 10}, yourself: {name: 'you', age: 20}} 
1

JSON是文本數據交換格式。正如其名稱(「JavaScript Object Notation」)所示,它來自JS;這意味着JSON實際上是語法上有效的JavaScript。換句話說,您可以將JSON字符串直接粘貼到您的JS代碼中。

數組是特殊的對象。它們可以由[]構建。

對象可以通過{}構建。

所以你在你的例子中有兩個JSON字符串,一個代表一個對象數組,第二個代表一個對象,它的屬性本身就是對象數組。