2010-11-30 87 views
26
var myJSON = { 
       "list1" : [ "1", "2" ], 
       "list2" : [ "a", "b" ], 
       "list3" : [ { "key1" : "value1" }, { "key2" : "value2" } ], 
       "not_a_list" : "11" 
      }; 

如何在JavaScript中動態構建此JSON結構?谷歌告訴我使用一些推送命令,但我只找到了具體的案例。那麼我該怎麼寫才能將數據輸入到「listX」和「not_a_list」。追加以及創建新列表。整個過程begninning有:如何在JavaScript中動態構建JSON?

var myJSON = {}; 
+0

你真的是指JSON(這是字符串)還是嵌套JavaScript對象,數組,字符串和數字(​​可以序列化爲JSON)的集合? – Quentin 2010-11-30 13:03:46

回答

53

首先,我認爲你稱它爲錯誤的東西。 「JSON」代表「JavaScript Object Notation」 - 它僅僅是一個用於顯式模仿JavaScript對象(以及數組,字符串,數字和布爾)文字的字符串中的一些數據的規範。您正試圖動態構建JavaScript對象 - 因此您要查找的單詞是「對象」。

隨着那種跋涉,我認爲你在問如何設置對象和數組屬性。

// make an empty object 
var myObject = {}; 

// set the "list1" property to an array of strings 
myObject.list1 = ['1', '2']; 

// you can also access properties by string 
myObject['list2'] = []; 
// accessing arrays is the same, but the keys are numbers 
myObject.list2[0] = 'a'; 
myObject['list2'][1] = 'b'; 

myObject.list3 = []; 
// instead of placing properties at specific indices, you 
// can push them on to the end 
myObject.list3.push({}); 
// or unshift them on to the beginning 
myObject.list3.unshift({}); 
myObject.list3[0]['key1'] = 'value1'; 
myObject.list3[1]['key2'] = 'value2'; 

myObject.not_a_list = '11'; 

該代碼將構建您在您的問題中指定的對象(除了我稱之爲myObject而不是myJSON)。有關訪問屬性的更多信息,我推薦Mozilla JavaScript GuideJavaScript: The Good Parts

+0

關於「鍵是數字」(並且稍微有些迂腐):它不是那麼完美,鍵總是對象中的字符串(包括數組),而「[0]」等隱式轉換爲「[」0「]等等(例如,請參閱https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)。 – 2016-12-04 17:05:18

12

由於myJSON是你可以設置其屬性的對象,例如:

myJSON.list1 = ["1","2"]; 

如果你不知道屬性的名稱,則必須使用數組訪問語法:

myJSON['list'+listnum] = ["1","2"]; 

如果要將元素添加到其中一個屬性,則可以這樣做;

myJSON.list1.push("3");