2014-04-09 64 views
0

我有這樣的JSON我是從一個Web服務調用找回:如何從一個JSON數組轉換成JSON對象

{ 
    "name": "My Name", 
    "path": "my path", 
    "id": "44", 
    "type": "my type", 
    "classes": "my classes" 
}, 
{ 
    "name": "his Name", 
    "path": "his path", 
    "id": "76", 
    "type": "his type", 
    "classes": "his classes" 
} 

然後我需要將其轉換爲這種格式

​​3210

我最初的天真的嘗試是這樣的:

var myData = []; 
for (var i = 0; i < rawData.length; i++) { 
myData.push({ 
    rawData[i].id : 
    { 
     "path": rawData[i].path, 
     "name": rawData[i].name 
    } 
}); 

其失敗,語法錯誤,所以我最終得到了這個:

var myData = []; 
for (var i = 0; i < rawData.length; i++) { 
myData.push(rawData[i].id, 
{ 
    "path": rawData[i].path, 
    "name": rawData[i].name 
}); 

它大部分是可以工作的。我的陣列已填充,但問題是我的myData陣列沒有對象的「44」和「76」部分,只有{ "name" : "", "path" : "" }部分。我期望這是由於我對JSON和javscript對象的工作方式缺乏瞭解。

+0

這與JSON無關。那些是數組和對象,而不是文本。 –

回答

1

您所需的輸出不是數組,因此這是您的出發點。你說你想要的輸出是對象,而不是一個數組。

您可以通過創建一個空的對象,然後使用id作爲密鑰附加的對象將其打造你的結果:

var myData = {}; 
rawData.forEach(function(entry) { 
    myData[entry.id] = { 
     name: entry.name, 
     path: entry.path 
    }; 
}); 

或者,如果你不想使用forEach(這是ES5,但可以勻對舊版瀏覽器),在老式的方法:

var myData = {}; 
var index, entry; 
for (index = 0; index < rawData.length; ++index) { 
    entry = rawData[index]; 
    myData[entry.id] = { 
     name: entry.name, 
     path: entry.path 
    }; 
} 
+0

從數組到對象的跳躍完成後,我錯過了它。謝謝。 – Nate

0

您需要將您的ID轉換爲字符串?

var myData = {}; 
for (var i = 0; i < rawData.length; i++) { 
    myData[String(rawData[i].id)] = { 
     "path": rawData[i].path, 
     "name": rawData[i].name 
    }; 
} 
+0

*「您需要將您的ID轉換爲字符串?」*不,它已經是一個字符串。如果不是,只要您將它用作屬性名稱('[']'符號)就會變成一個。 –

1

不要使用Array.prototype.push(),使用方括號和定義輸出作爲對象不是一個數組。

var myData = {}; 
for (var i = 0; i < rawData.length; i++) { 
    myData[rawData[i].id] = { 
     "path": rawData[i].path,  
     "name": rawData[i].name 
    } 
} 
0

什麼其他海報的變化採寫:

// Create a new empty object. 
var out = {}; 

// Loop over your array of objects 
// Add the each object id as a key to the output object, and the object as the value. 
for (var i = 0, l = arr.length; i <l; i++) { 
    var obj = arr[i]; 
    out[obj.id] = obj; 

    // Delete the properties from the newly added object you don't want. 
    delete obj.id; 
    delete obj.type; 
    delete obj.classes; 
}