Конвертировать массив в JSON

383

У меня есть массив, var cars = [2,3,..]который содержит несколько целых чисел. Я добавил несколько значений в массив, но теперь мне нужно отправить этот массив на страницу с помощью .getметода jQuery . Как я могу преобразовать его в объект JSON для отправки?

рехнувшийся
источник
Просто дважды проверьте: массив, который вы хотите отправить на страницу, это массив JavaScript или он находится на сервере?
Ян Оксли
это массив Javascript, я буду отправлять его скрипту Python, а Python будет использовать строку JSON и работать с этим.
Дотти

Ответы:

657

Скрипт для обратной совместимости: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

И позвоните:

var myJsonString = JSON.stringify(yourArray);

Примечание. Объект JSON теперь является частью большинства современных веб-браузеров (IE 8 и выше). Смотрите caniuse для полного списка. Кредит идет к: @Spudley для его комментария ниже

JonoW
источник
5
Это работает, есть ли в jQuery такая функция? Я предпочел бы не прикреплять другой файл js, если jQuery уже имеет функцию.
Дотти
1
В jQuery есть реализация JSON.parse в 1.4.1, но не JSON.stringify ... Если вы думаете, что json2.js его <3k, я думаю.
gnarf
6
Да, я был удивлен, что jQuery тоже не встроил это
JonoW
120
для тех, кто все еще читает этот ответ, стоит отметить, что все современные браузеры включают этот JSONобъект в качестве стандартного, что означает, что вам не нужен этот скрипт, если вы не планируете поддерживать более старые браузеры, такие как IE7 или Firefox 3.0. Смотрите CanIUse для поддержки диаграммы.
Спадли
1
Стоит отметить, что вы можете сделать это в консоли браузера: var a = [paste]; JSON.stringify (a)
Майкл Коул
70

Я сделал это так:

если у меня есть:

var jsonArg1 = new Object();
    jsonArg1.name = 'calc this';
    jsonArg1.value = 3.1415;
var jsonArg2 = new Object();
    jsonArg2.name = 'calc this again';
    jsonArg2.value = 2.73;

var pluginArrayArg = new Array();
    pluginArrayArg.push(jsonArg1);
    pluginArrayArg.push(jsonArg2);

преобразовать pluginArrayArg (который является чистым массивом javascript) в массив JSON:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))
Станчо Станчев
источник
1
Ты спас мне жизнь
доктор медицины. Shafayatul Haque
45

Ничего себе, кажется, теперь стало намного проще ... 3 способа сделать это:

json = { ...array };

json = Object.assign({}, array);

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});
Эдуардо Сганзерла
источник
2
jsonString = JSON.stringify({ ...array })
Кришна Крутящий момент
11

Я решил использовать библиотеку json2 и получил ошибку о «циклических структурах данных».

Я понял это, сказав json2, как конвертировать мой сложный объект. Не только это работает сейчас, но и я включил только те поля, которые мне нужны. Вот как я это сделал:

OBJ.prototype.toJSON = function (key) {
       var returnObj = new Object();
       returnObj.devid = this.devid;
       returnObj.name = this.name;
       returnObj.speed = this.speed;
       returnObj.status = this.status;
       return returnObj;
   }
Пауло Педросо
источник
11

Или попробуйте определить массив как объект. (var cars = {};) Тогда нет необходимости конвертировать в json. Это не может быть практичным в вашем примере, но хорошо сработало для меня.

Фрэнк Адриан
источник
4

Еще один способ может быть таким:

        var json_arr = {};
        json_arr["name1"] = "value1";
        json_arr["name2"] = "value2";
        json_arr["name3"] = "value3";

        var json_string = JSON.stringify(json_arr);
Виджай Бансал
источник
1

Если у вас есть только 1 объект, подобный тому, который вы просили, сработает следующее.

var x = [{'a':'b'}];
var b= JSON.stringify(x);
var c = b.substring(1,b.length-1);
JSON.parse(c); 
Махмуд Ихмейд
источник
1

Самый короткий способ, которым я знаю, чтобы создать действительный JSON из массива целых чисел, это

let json = `[${cars}]`

для более общего объекта / массива (без циклических ссылок ) используйте JSON.stringify (cars)

Камил Келчевски
источник
1

потому что мой массив был как показано ниже: и я использовал функцию .push для ее динамического создания

my_array = ["234", "23423"];

Единственный способ, которым я преобразовал свой массив в JSON, это

json = Object.assign({}, my_array);
Харшал Лонаре
источник