2014-01-08 21 views
0

我有這個簡單的JSON如何找到指定變量JSON值與jQuery

{"places" : { 
    "home" : { 
     "1": "red" 
    } 
}} 

我需要得到1值依賴於某些變量,它是我的身體類。身體類是可變的。所以這是我的腳本:

(function(){  
    var bodyClass = $('body').attr('class'); 
    function getPlaceValue(){ 
     return $.getJSON('data.json', function(data) { 
      var placeValue; 
      placeValue = data.places.bodyClass.1; 
      return placeValue; 
     }); 
    } 

    getPlaceValue().done(function(placeValue){ 
     console.log(placeValue); 
    }); 
}).call(this); 

我有迴應,1值是未定義的。有什麼不對,有沒有可能做到這一點?

+5

'data.places [ bodyClass] [1]'。另外,我不認爲你可以從你的回調中返回placeValue。 –

+2

.getjson是非阻塞的。它會立即返回**之前** ajax呼叫有機會甚至走出門外或產生任何結果。你的'return placeValue'將無處可回。 –

+0

可能重複http://stackoverflow.com/questions/5809790/can-i-get-a-javascript-object-property-name-that-starts-with-a-number – DairyLea

回答

2

您定義bodyClass爲變量:

var bodyClass = $('body').attr('class'); 

...但隨後嘗試讀取文字bodyClass財產,這當然是不存在的:

placeValue = data.places.bodyClass.1; 

此外,you cannot use the dot syntax to access the 1 property

對象屬性名稱可以是任何有效的JavaScript字符串,或 任何可以轉換爲字符串的字符串,包括空字符串 。但是,只能使用正方形 括號表示法訪問任何屬性名稱,該名稱不是有效的JavaScript 標識符(例如,具有空格或連字符的屬性名稱, 或以數字開頭)。這種表示法也是非常有用的,當財產 的名字將被動態地確定(當屬性名稱不 決定,直到運行時)

我想你的意思是這樣的:

placeValue = data.places[bodyClass][1]; 
+2

另外,'[1]',不是'.1' :-P –

+0

仍然有未定義的'1' – Lukas

+0

@RocketHazmat - 正確,對不起,因爲忽略了。我已經添加了適當的參考。 –