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

时间:2015-12-16 12:35:04

标签: javascript jquery json asp.net-mvc json.net

我有一个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": "...",
        }
    }
}

3 个答案:

答案 0 :(得分:1)

我想你正在搜索$.map()

在后台,它正在循环你的收藏,但在你的情况下使用它会更加清晰。

答案 1 :(得分:1)

更新以使用您的示例json。 Jsfiddle



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
  }
}




答案 2 :(得分:1)

我找到了一个有效的解决方案,感谢teo van kot使用jQuery map。

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);