У меня есть объект 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, чтобы я мог отправить весь объект «Мир» как 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": "...",
        }
    }
}
1
Sam 16 Дек 2015 в 15:35

3 ответа

Лучший ответ

Я нашел рабочее решение благодаря Тео Ван Коту, использующему карту 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);
1
Sam 17 Дек 2015 в 11:58

Я полагаю, вы ищете $.map().

На заднем плане это зацикливает вашу коллекцию, но намного удобнее использовать ее в вашем случае.

1
teo van kot 16 Дек 2015 в 12:40

Обновлено, чтобы использовать ваш пример 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
  }
}
1
CarbonDry 16 Дек 2015 в 14:30