2012-01-09 45 views
3

我使用jquery的parseJSON()函數將json字符串插入到變量中。問題是,它將我的數據變成一個對象而不是2d數組。例如,需要將json鍵值對轉換爲標準數組

myData = $.parse(JSON(data)); 
myData.name// = "Bob" 

的問題是,「名」不應該是一個關鍵(假設是正確的術語)。相反,它應該是:

myData[0] // = "name" 
myData[1] // = "Bob" 

我怎麼會轉換呢?或者,有一種方法不同於使用for循環遍歷數組的索引(但仍然能夠以字符串的形式訪問key和value,就像在2d數組中一樣)。

編輯:這是一些正在使用的JSON(注意它更長)。這是給出了「數據」

{"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"} 
+1

能告訴你,你填寫的代碼'data' – 2012-01-09 08:38:43

+0

添加JSON的一個片段,是你在找什麼? – 2012-01-09 08:40:20

+0

如果你不介意我的話,這似乎有點奇怪。爲什麼要用鍵和它們的值創建一個平面陣列? – 2012-01-09 08:46:13

回答

5

一旦你反序列化數據(例如,你有myData,這是一個對象),你可以通過它的鍵循環使用for..in,然後建立一個陣列,結合鍵和值:

var myData, dataArray, key; 
myData = $.parse(JSON(data)); 
dataArray = []; 
for (key in myData) { 
    dataArray.push(key);   // Push the key on the array 
    dataArray.push(myData[key]); // Push the key's value on the array 
} 

由於myDatadata反序列化JSON的結果,我們知道myData是一個通用的對象(例如,僅僅是{},而不是一個new Foo或類似的東西) ,所以我們甚至不知道編號hasOwnProperty。如果我們不知道,我們只是想列舉myData自己鍵和值,我們將增加一個hasOwnProperty檢查:

var myData, dataArray, key; 
myData = $.parse(JSON(data)); 
dataArray = []; 
for (key in myData) { 
    if (myData.hasOwnProperty(key)) { 
     dataArray.push(key);   // Push the key on the array 
     dataArray.push(myData[key]); // Push the key's value on the array 
    } 
} 

沒有理由這樣做,你的情況,除非有人一直在用Object.prototype(在這種情況下,把他們放在木棚後面,給他們一個嚴重的隱藏,然後讓他們寫「我不會在黑板上用Object.prototype幾百次搞砸),但是每當你使用for..in時, A)對象保證是香草,B)如果不是,你想只有它自己的屬性,還是你想要它繼承的那些?

+0

第一個代碼塊工作得很好。它的工作方式,我甚至不需要將它們移動到一個新的陣列。我可以在該循環中分配數據。精彩!謝謝 – 2012-01-09 08:49:10

1
var data = $.parse(JSON({"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"})); 

var arr = []; 

for(var i in data) { 
    if(data.hasOwnProperty(i)){ 
    arr.push(i, data[i]); 
    } 
} 

陣列將是:

["feat_3", "4356", "feat_4", "45", "feat_5", "564", "feat_6", "7566"] 
+0

謝謝,但我發現TJ的解決方案比我原來計劃的轉換爲2d陣列更好。 – 2012-01-09 08:52:57

+0

更正。在'push'方法中,您可以應用多個參數來填充數組 – abuduba 2012-01-09 08:56:21