2012-01-06 14 views
47

最近開始挖掘到JSON,並且我正在嘗試使用一個數字作爲「標識符」,這種方法效果不佳。 foo:"bar"工作正常,而0:"bar"沒有。使用數字作爲「索引」(JSON)

var Game = { 
    status: [ 
       { 
        0:"val", 
        1:"val", 
        2:"val" 
       }, 
       { 
        0:"val", 
        1:"val", 
        2:"val" 
       } 
      ] 
} 

alert(Game.status[0].0); 

有沒有辦法按照以下方式做到這一點?像Game.status[0].0會讓我的生活更輕鬆。當然,還有其他方法,但這種方式是首選。

+1

原因是,在JavaScript中,與其他許多語言一樣,屬性的/變量的名稱不能以數字開頭,但只能使用$,_,a-z和A-Z。爲什麼Game.status [0]不是數組?那麼你的語法就是'Game.status [0] [0]'。 – 2012-01-06 13:50:48

回答

73

JSON只允許鍵名是字符串。這些字符串可以由數值組成。

雖然您不使用JSON。你有一個JavaScript對象文字。您可以使用密鑰的標識符,但標識符不能以數字開頭。你仍然可以使用字符串。

var Game={ 
    "status": [ 
     { 
      "0": "val", 
      "1": "val", 
      "2": "val" 
     }, 
     { 
      "0": "val", 
      "1": "val", 
      "2": "val" 
     } 
    ] 
} 

如果您使用點符號訪問屬性,那麼您必須使用標識符。改用方括號表示法:Game[0][0]

但是考慮到這些數據,一個數組似乎更有意義。

var Game={ 
    "status": [ 
     [ 
      "val", 
      "val", 
      "val" 
     ], 
     [ 
      "val", 
      "val", 
      "val" 
     ] 
    ] 
} 
+0

這仍然不允許你做'Game.status [0] .0' – JaredMcAteer 2012-01-06 13:48:29

+8

不,但會允許'Game.status [0] [0]'。 – Amadan 2012-01-06 13:49:00

+3

@OriginalSyn不可能擁有'Game.status [0] .0',因爲如果你想使用點符號,Javascript只允許屬性名以字母或下劃線開頭。這是沒有辦法的。 – zatatatata 2012-01-06 13:52:56

0

什麼

Game.status[0][0] or Game.status[0]["0"] ? 

做這些工作呢?

PS:在你的問題中你有什麼是一個Javascript對象,而不是JSON。 JSON是Javascript對象的'字符串'版本。

+0

「JSON是Javascript對象的'字符串'版本。」那是不正確的。 JSON對象是JavaScript對象的子集。否則,你是正確的是JavaScript對象,因爲它不符合JSON規範 – JaredMcAteer 2012-01-06 13:47:19

+0

JSON是JavaScript *對象文字符號*的子集,而JSON對象是可以用JSON表示的數據類型。 – Quentin 2012-01-06 13:51:42

+0

@OriginalSyn:呃,不是。 JSON是一種「可互換」格式,用作與語言無關的字符串格式。大多數語言都可以解析JSON,而在Javascript中,它會變成一個Javascript對象。請參閱http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/。 – 2012-01-06 13:59:08

4

可能您需要一個數組?

var Game = { 

    status: [ 
     ["val", "val","val"], 
     ["val", "val", "val"] 
    ] 
} 

alert(Game.status[0][0]); 
3

首先,它不是JSON:JSON要求所有的鍵必須是字符串。

其次,定期陣列做你想做的:

var Game = { 
    status: [ 
    [ 
     "val", 
     "val", 
     "val" 
    ], 
    [ 
     "val", 
     "val", 
     "val" 
    ] 
    } 
} 

會的工作,如果你使用Game.status[0][0]。您不能使用帶點號的數字(.0)。

或者,您可以引用數字(即{ "0": "val" }...);您將擁有普通對象而不是陣列,但是相同的語法將起作用。

3

當一個Javascript對象屬性的名稱不與下劃線或字母開頭,你不能使用點符號(如Game.status[0].0),你必須使用替代的符號,這是Game.status[0][0]

一個不同的說明,你真的需要它是狀態數組內的一個對象嗎?如果你像使用數組一樣使用對象,爲什麼不使用真正的數組呢?