我有一个javascript对象,其中包含由一个名为"json"的变量中保存的插件获得的嵌套对象:
// var json:
Object {0: Object, 1: Object}
0: country
countryCapital: Object
ministers: Array[1]
1: country
countryCapital: Object
ministers: Array[3]
// Should be restructured to fit MVC models
World
Country Array [2]
Capital: Object
Minister: Array [1]
因为我使用jQuery-ajax将数据发送到MVC控制器,所以我试图重命名/重组它们,将它们绑定到MVC模型,这样我就可以将整个"World"对象作为1个参数发送。
// Controller
[HttpPost]
public void Save(World world)
// Model structure:
World
* Country (list)
1 Capital
* Minister (list)
如何将javascript对象转换为适合Model参数的正确结构?我需要循环所有内容还是可以用更好的方式完成?
更新:
json对象更新,它有很多数据,所以我简化了它。
// World
{
"0": { // Country
"ministers":
{
"objects": [
{
"name": "name1"
},
{
"name": "name2"
}
]
},
"countryCapital": {
"name": "...",
}
},
"1": { // Country
"ministers":
{
"objects": [
{
"name": "name1"
},
{
"name": "name2"
}
]
},
"countryCapital": {
"name": "...",
}
}
}
我想您正在搜索$.map()
。
在后台,它会循环你的收藏,但在你的情况下使用它会更干净。
更新为使用您的示例json。Jsfidle
var world = {}
for (var countryIteration in originalObject) {
var country = originalObject[countryIteration];
world[countryIteration] = { //you need to this because you need dynamic keys.
capital : country.countryCapital.name,
ministers : country.ministers.objects
}
}
由于teo van kot使用jQuery映射,我找到了一个有效的解决方案。
var world = {}
$.map(json, function (value, i) {
if (i == "countryCapital") {
world.Capital = value
}
if (i == "ministers") {
world.Minister= value
$.each(value, function (j, minister) {
world.Minister[j].Name = minister.name;
delete minister.name;
});
}
}, world);