重构JS对象以适应绑定MVC模型



我有一个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);

最新更新