Converter matriz em JSON


383

Eu tenho uma matriz var cars = [2,3,..]que contém alguns números inteiros. Adicionei alguns valores à matriz, mas agora preciso enviar essa matriz para uma página via .getmétodo do jQuery . Como posso convertê-lo em um objeto JSON para envio?


Basta verificar duas vezes: a matriz que você deseja enviar para a página é uma matriz JavaScript ou está no servidor?
22610 Ian

como uma matriz Javascript, enviarei-a para um script Python e o Python usará a string JSON e trabalhará com isso.
dotty

Respostas:


657

Script para compatibilidade com versões anteriores: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

E ligue para:

var myJsonString = JSON.stringify(yourArray);

Nota: O objeto JSON agora faz parte dos navegadores mais modernos (IE 8 e superior). Veja caniuse para obter uma lista completa. Crédito vai para: @ Spudley por seu comentário abaixo


5
Isso funciona, o jQuery tem uma função como esta? Eu preferiria não anexar outro arquivo js se o jQuery já tiver uma função.
dotty

11
O jQuery tem a implementação do JSON.parse na 1.4.1, mas não o JSON.stringify ... Se você minifiy o json2.js é <3k, eu acho.
Gnarf

6
Sim, eu estava surpresos com jQuery não têm esta embutido também
JonoW

120
para quem ainda está lendo esta resposta, vale ressaltar que todos os navegadores modernos incluem o JSONobjeto como padrão, o que significa que você não precisa desse script, a menos que esteja planejando oferecer suporte a navegadores mais antigos, como o IE7 ou o Firefox 3.0. Consulte CanIUse para a tabela de suporte.
Spudley

11
Vale ressaltar que você pode fazer isso no console do navegador: var a = [paste]; JSON.stringify (a)
Michael Cole

70

Eu fiz assim:

se eu tiver:

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

para converter pluginArrayArg (que é uma matriz javascript pura) em uma matriz JSON:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))

11
Você salvou minha vida
MD. Shafayatul Haque

44

Uau, parece que ficou muito mais fácil hoje em dia ... 3 maneiras de fazer isso:

json = { ...array };

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

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});

2
jsonString = JSON.stringify({ ...array })
Krishna Torque

11

Decidi usar a biblioteca json2 e recebi um erro sobre "estruturas de dados cíclicos".

Eu o resolvi dizendo ao json2 como converter meu objeto complexo. Não só funciona agora, mas também incluí apenas os campos necessários. Aqui está como eu fiz isso:

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

Ou tente definir a matriz como um objeto. (var cars = {};) Então não há necessidade de converter para json. Isso pode não ser prático no seu exemplo, mas funcionou bem para mim.


4

Uma outra maneira poderia ser esta:

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

        var json_string = JSON.stringify(json_arr);

1

Se você tiver apenas 1 objeto como o que você pediu, o seguinte funcionará.

var x = [{'a':'b'}];
var b= JSON.stringify(x);
var c = b.substring(1,b.length-1);
JSON.parse(c); 

1

A maneira mais curta que sei gerar json válido a partir de uma matriz de números inteiros é

let json = `[${cars}]`

para objeto / matriz mais geral (sem referências circulares ), use JSON.stringify (cars)


1

porque minha matriz era como abaixo: e usei a função .push para criá-la dinamicamente

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

A única maneira de converter minha matriz em json é

json = Object.assign({}, my_array);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.