2012-01-05 52 views
4

我正在做一些JS代碼,在那裏我需要設置一個變量作爲一個JSON數組使用Javascript array.push()的關鍵:如何設置上的Array.push JSON數組鍵上的JavaScript

var test = 'dd'+questNumb; 
window.voiceTestJSON.push({test:{"title":""}, "content":{"date":""}}); 

在哪裏questNumb是另一個變量。當做這個代碼時,我剛寫下test變量的部分就變成了密鑰"test",所以我不知道要把它變成炒鍋。怎麼會這樣?謝謝!

+0

[將動態關鍵字:值對傳遞給對象字面量?](http://stackoverflow.com/questions/4119324/passing-in-dynamic-keyvalue-pairs-to-an-object-literal ) – 2012-01-05 13:29:15

回答

4

如果你想要的變量作爲鍵,你需要括號:

var object = {}; 
object['dd'+questNumb] = {"title":""}; 
object["content"] = {"date":""}; //Or object.content, but I used brackets for consistency 
window.voiceTestJSON.push(object); 
+0

這個工作,而且是很容易理解:d – pmerino 2012-01-05 13:28:55

2

你需要做這樣的事情:

var test = "dd" + questNumb, 
    obj = {content: {date: ""}}; 

// Add the attribute under the key specified by the 'test' var 
obj[test] = {title: ""}; 

// Put into the Array 
window.voiceTestJSON.push(obj); 
2

(首先,你沒有一個JSON數組,你有一個JavaScript對象。JSON是一個語法看起來像JavaScript的對象文字語法數據的字符串表示。)

不幸的是,當你使用JavaScript的對象文字語法來創建一個對象不能使用變量來設置動態屬性名稱。你必須首先創建對象,然後使用obj[propName]語法添加的屬性:

var test = "dd" + questNumb, 
    myObj = { "content" : {"date":""} }; 

myObj[test] = {"title" : ""}; 

window.voiceTestJSON.push(myObj); 
+0

@Dennis - 是的,「子集」是常用詞,但嚴格來說,它因爲'是不完全正確「[1,2,3]」'是有效的JSON但是_array_文字符號而不是_object_文字符號。 (我也相信有一些Unicode字符是有效的JSON中,但不是在JavaScript中,雖然對我的生活我不記得細節,我不能打擾查找它。) – nnnnnn 2012-01-05 14:00:26

+0

Unicode的位聽起來很熟悉 - 我一直忘記''這個「'和'[」t「,」h「,」i「,」s「]'是有效的JSON。 – Dennis 2012-01-05 14:18:19

0
{test:{"title":""}, "content":{"date":""}} 

這是一個JS對象。所以你要將一個對象放到voiceTestJSON數組中。

與內JSON,JS對象的屬性名稱可以用或不用引號寫入。

你想要做什麼就可以實現這樣的:

var test = 'dd'+questNumb; 
var newObject = {"content":{"date":""}}; //this part does not need a variable property name 
newObject[test] = {"title":""}; 

這樣你設置包含在測試該名稱的屬性{「稱號」:「」}。