Как мне преобразовать этот многомерный ассоциативный массив в json? - PullRequest
2 голосов
/ 13 июня 2011

У меня есть цикл, который создает ассоциативный массив в js, который мне нужно преобразовать в json.

Javascript:

var guest = {};
var guests = {};

for(var i=0;i<2;i++){
  var name = GetName();
  var email = GetEmail();
  guest = { 'Email': email, 'Name': name };
  guests.push(guest);
}

Конец цикла даст мне, скажем:

{
 {'Email':"bob@zyz.com", 'Name':"Mr. Bob"},
 {'Email':"tom@zyz.com", 'Name':"Mr. Tom"}
}

Как я могу преобразовать это в JSON? (Хорошо с небольшим плагином jquery)

Мне нужно передать этот массив json моему контроллеру MVC 3:

[HttpPost]
public ActionResult AddGuests(List<SelectedGuest> guests){

}

public class SelectedGuest
{
    public string Email { get; set; }
    public string Name { get; set; }
}

Спасибо за чтение.

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

Вам нужны квадратные скобки, если вы хотите иметь дело с массивами. В javascript действительно есть два артефакта: объекты ({}) и массивы объектов ([]), и различие действительно важно:

var guest = { };
var guests = [ ];

for(var i = 0; i < 2; i++) {
    var name = GetName();
    var email = GetEmail();
    guest = { 'Email': email, 'Name': name };
    guests.push(guest);
}

Теперь, когда мы исправили ваш javascript, давайте использовать AJAX для отправки этого массива guests в действие контроллера AddGuests:

$.ajax({
    url: '/SomeController/AddGuests',
    data: JSON.stringify(guests),
    type: 'POST',
    contentType: 'application/json', // <-- Make sure to set the proper content type
    success: function(result) {
        // TODO: handle the results of the controller action
    }
});

Показанный здесь метод JSON.stringify реализован в большинстве современных браузеров, но для более старых браузеров вы можете захотеть включить следующий скрипт .

Последнее замечание:

Никогда не кодируйте URL в коде JavaScript, как это:

url: '/SomeController/AddGuests'

Всегда используйте помощники Url в ASP.NET MVC при работе с URL, например:

url: '@Url.Action("AddGuests", "SomeController")'
1 голос
/ 13 июня 2011

После вашего вызова за цикл JSON.stringify();

var json = JSON.stringify(guests);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...