2012-04-12 66 views
1

我從服務器接收像下面這樣的JSON:轉換JSON多維JavaScript數組

{"0":{"0":"image1.jpg","1":"texthere","2":"0"},"1":{"0":"image66.jpg","1":"texthere","2":"1"},"2":{"0":"image12.jpg","1":"texthere","2":"2"},"3":{"0":"image44.jpg","1":"texthere","2":"3"},"4":{"0":"image34.jpg","1":"texthere","2":"4"},"5":{"0":"image33.jpg","1":"texthere","2":"5"},"6":{"0":"image21.jpg","1":"texthere","2":"6"},"7":{"0":"image32.jpg","1":"texthere","2":"7"},"8":{"0":"image13.jpg","1":"texthere","2":"8"},"9":{"0":"image11.jpg","1":"texthere","2":"9"},"10":{"0":"image03.jpg","1":"texthere","2":"10"},"length":"12"} 

誰編碼這個曾經JSON_FORCE_OBJECT作爲PHP的json_encode方法的參數的開發商。

在JavaScript中是否有任何「魔法」(即不是自定義函數)將此結構轉換爲多維數組?

我想是這樣的:

[["image1.jpg","texthere","2"],["image66.jpg","texthere","1"]]... 

免責聲明: - 我在尋找本地實現(不JQuery的); - PHP可以最終更改(如果需要);

任何幫助表示讚賞,在此先感謝。

+1

好吧,一個簡單的方法就是告訴開發者不要強迫它成爲一個對象並以正確的方式構建它。什麼更耗時?改變那個標誌,或建立代碼來轉換它? – Joseph 2012-04-12 10:18:05

+0

@Joseph,我想你會發現寫幾行代碼要比處理一個不稱職的開發人員要快得多。 – 2012-04-12 10:52:31

+0

好的,除了「手動」添加(在PHP中)包含鍵數的長度鍵之外,還有其他方法可以計算JSON中存儲了多少個數組嗎? – Battery 2012-04-12 10:53:34

回答

0

我能想到的最簡單的方法就是使用正則表達式將JSON從對象字面值轉換爲數組字面值。

不幸的是,西蒙考威爾比這種方法更神奇。

//I don't know why you don't want a custom function. 
function dataToArray(data) 
{ 
    data = data.replace(/"[0-9]+":/g,"");   //Remove all index keys 
    data = data.replace(/,"length":"[0-9]+"/g,""); //Remove length key-value pair 
    data = data.replace(/{/g,"[");     //Change the left brackets 
    data = data.replace(/}/g,"]");     //Change the right brackets 

    return JSON.parse(data); 
} 
+0

Andrew首先感謝「無能」:-)第二件事:我認爲有一些CPU密集度較低,因爲我在移動環境中使用JS框架(這意味着更少的內存資源)。第三個想法:我認爲有一種方法可以計算JSON中的元素。無論如何,人們會問一些事情,因爲他想學習更多東西,而不是讓你失去時間。 – Battery 2012-04-12 10:58:16

+0

我不叫你無能!!! D:只需編寫服務器端代碼的人!除非你在第三人稱中提及自己。而且我認爲你會發現手機的CPU和RAM功能可以實際執行javascript,這足以計算出正則表達式,這實際上是非常有效且簡單的計算方式。如果有的話,它解析JSON,你應該擔心! – 2012-04-12 11:00:34

+0

哦,對不起:-)我以爲它被轉介給我。問題在於「無能」產生了巨大的JSON,我試圖通過消除內鍵來減少損害。感謝您的回覆,並再次抱歉。 – Battery 2012-04-12 11:36:53

0

並不神奇,但您可以遍歷數據並測試它具有的值的類型。

一個基本的例子如下。它沒有檢查我想要的生產代碼中的錯誤。

var data = {"0":{"0":"image1.jpg","1":"texthere","2":"0"},"1":{"0":"image66.jpg","1":"texthere","2":"1"},"2":{"0":"image12.jpg","1":"texthere","2":"2"},"3":{"0":"image44.jpg","1":"texthere","2":"3"},"4":{"0":"image34.jpg","1":"texthere","2":"4"},"5":{"0":"image33.jpg","1":"texthere","2":"5"},"6":{"0":"image21.jpg","1":"texthere","2":"6"},"7":{"0":"image32.jpg","1":"texthere","2":"7"},"8":{"0":"image13.jpg","1":"texthere","2":"8"},"9":{"0":"image11.jpg","1":"texthere","2":"9"},"10":{"0":"image03.jpg","1":"texthere","2":"10"},"length":"12"}; 

function data_to_array(data) { 
    var array = []; 
    for (var key in data) { 
     var value = data[key]; 
     if (typeof value === 'string') { 
      array[key] = value; 
     } else { 
      array[key] = data_to_array(value); 
     } 
    } 
    return array; 
} 

var array = data_to_array(data); 
console.log(array); 

確保您添加hasOwnProperty檢查您的對象原型是否可能會混淆。您應該也可以添加一個檢查以確保只有整數鍵被添加到數組中。

0

沒有內置功能。如果你有JSON字符串,你可以做字符串替換,否則你必須循環如下。

var dataObject = {"0":{"0":"image1.jpg","1":"texthere","2":"0"},"1":{"0":"image66.jpg","1":"texthere","2":"1"},"2":{"0":"image12.jpg","1":"texthere","2":"2"},"3":{"0":"image44.jpg","1":"texthere","2":"3"},"4":{"0":"image34.jpg","1":"texthere","2":"4"},"5":{"0":"image33.jpg","1":"texthere","2":"5"},"6":{"0":"image21.jpg","1":"texthere","2":"6"},"7":{"0":"image32.jpg","1":"texthere","2":"7"},"8":{"0":"image13.jpg","1":"texthere","2":"8"},"9":{"0":"image11.jpg","1":"texthere","2":"9"},"10":{"0":"image03.jpg","1":"texthere","2":"10"},"length":"12"}; 

function getArray(object){ 
    var array = []; 
    for(var key in object){ 
     var item = object[key]; 
     array[parseInt(key)] = (typeof(item) == "object")?getArray(item):item; 
    } 
    return array; 
} 

var dataArray = getArray(dataObject);