Convertir matriz a JSON

383

Tengo una matriz var cars = [2,3,..]que contiene algunos enteros. He agregado algunos valores a la matriz, pero ahora necesito enviar esta matriz a una página a través del .getmétodo de jQuery . ¿Cómo puedo convertirlo en un objeto JSON para enviar?

punteado
fuente
Solo doble comprobación: ¿la matriz que desea enviar a la página es una matriz de JavaScript o está en el servidor?
Ian Oxley
es una matriz de Javascript, la enviaré a un script de Python y Python usará la cadena JSON y trabajará con eso.
dotty

Respuestas:

657

Script para compatibilidad con versiones anteriores: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Y llama:

var myJsonString = JSON.stringify(yourArray);

Nota: El objeto JSON ahora es parte de la mayoría de los navegadores web modernos (IE 8 y superior). Ver caniuse para el listado completo. El crédito va a: @Spudley por su comentario a continuación

JonoW
fuente
55
Esto funciona, ¿jQuery tiene una función como esta? Prefiero no adjuntar otro archivo js si jQuery ya tiene una función.
dotty
1
jQuery tiene la implementación de JSON.parse en 1.4.1, pero no JSON.stringify ... Si minimizas json2.js es <3k, creo.
gnarf
66
Sí, me sorprendió que jQuery no tuviera esto incorporado también
JonoW
120
Para cualquiera que todavía lea esta respuesta, vale la pena señalar que todos los navegadores modernos incluyen el JSONobjeto como estándar, lo que significa que no necesita este script a menos que esté planeando admitir navegadores más antiguos como IE7 o Firefox 3.0. Consulte CanIUse para ver la tabla de soporte.
Spudley
1
Vale la pena señalar que puede hacer esto en una consola del navegador: var a = [pegar]; JSON.stringify (a)
Michael Cole
70

Lo hice así:

si tengo:

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 convertir pluginArrayArg (que es una matriz javascript pura) en una matriz JSON:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))
Stancho Stanchev
fuente
1
Me salvaste la vida
MD. Shafayatul Haque
45

Wow, parece que ahora es mucho más fácil ... 3 formas de hacerlo:

json = { ...array };

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

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});
Eduardo Sganzerla
fuente
2
jsonString = JSON.stringify({ ...array })
Krishna Torque
11

Decidí usar la biblioteca json2 y recibí un error sobre "estructuras de datos cíclicos".

Lo resolví diciéndole a json2 cómo convertir mi objeto complejo. No solo funciona ahora, sino que también he incluido solo los campos que necesito. Así es como lo hice:

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;
   }
Paulo Pedroso
fuente
11

O intente definir la matriz como un objeto. (var cars = {};) Entonces no hay necesidad de convertir a json. Puede que esto no sea práctico en su ejemplo, pero funcionó bien para mí.

Frank Adrian
fuente
4

Otra forma podría ser esta:

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

        var json_string = JSON.stringify(json_arr);
Vijay Bansal
fuente
1

Si solo tiene 1 objeto como el que solicitó, lo siguiente funcionará.

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

La forma más corta que sé para generar json válidos a partir de una matriz de enteros es

let json = `[${cars}]`

para un objeto / matriz más general (sin referencias circulares ) use JSON.stringify (cars)

Kamil Kiełczewski
fuente
1

porque mi matriz era la siguiente: y utilicé la función .push para crearla dinámicamente

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

La única forma en que convertí mi matriz en json es

json = Object.assign({}, my_array);
Harshal Lonare
fuente