Converti array in JSON


383

Ho un array var cars = [2,3,..]che contiene alcuni numeri interi. Ho aggiunto alcuni valori alla matrice, ma ora ho bisogno di inviare questa matrice a una pagina tramite il .getmetodo di jQuery . Come posso convertirlo in un oggetto JSON per l'invio?


Doppio controllo: l'array che si desidera inviare alla pagina è un array JavaScript o è sul server?
Ian Oxley,

è un array Javascript, lo invierò a uno script Python e Python utilizzerà la stringa JSON e funzionerà con quello.
dotty

Risposte:


657

Script per compatibilità con le versioni precedenti: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

E chiama:

var myJsonString = JSON.stringify(yourArray);

Nota: l'oggetto JSON ora fa parte della maggior parte dei browser Web moderni (IE 8 e versioni successive). Vedi caniuse per l'elenco completo. Il merito va a: @Spudley per il suo commento qui sotto


5
Funziona, jQuery ha una funzione come questa? Preferirei non allegare un altro file js se jQuery ha già una funzione.
dotty

1
jQuery ha l'implementazione di JSON.parse in 1.4.1, ma non JSON.stringify ... Se minimizzi json2.js è <3k credo.
Gnarf,

6
Sì, ero sorpreso che anche jQuery non lo avesse incorporato
JonoW,

120
per chiunque stia ancora leggendo questa risposta, vale la pena sottolineare che tutti i browser moderni includono l' JSONoggetto come standard, il che significa che non è necessario questo script a meno che non si preveda di supportare browser meno recenti come IE7 o Firefox 3.0. Vedi CanIUse per la tabella di supporto.
Spudley,

1
Vale la pena sottolineare che è possibile farlo in una console del browser: var a = [incolla]; JSON.stringify (a)
Michael Cole,

70

L'ho fatto in questo modo:

Se ho:

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

per convertire pluginArrayArg (che è un array javascript puro) in un array JSON:

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

1
Mi hai salvato la vita
MD. Shafayatul Haque,

45

Wow, sembra che sia diventato molto più facile al giorno d'oggi ... 3 modi in cui puoi farlo:

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

Ho deciso di utilizzare la libreria json2 e ho ricevuto un errore relativo alle "strutture di dati cicliche".

Ho risolto dicendo a json2 come convertire il mio oggetto complesso. Non solo funziona ora, ma ho anche incluso solo i campi di cui ho bisogno. Ecco come l'ho fatto:

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

Oppure prova a definire l'array come oggetto. (var cars = {};) Quindi non è necessario convertirlo in json. Questo potrebbe non essere pratico nel tuo esempio, ma ha funzionato bene per me.


4

Un altro modo potrebbe essere questo:

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

        var json_string = JSON.stringify(json_arr);

1

Se hai solo 1 oggetto come quello che hai chiesto, funzionerà quanto segue.

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

1

Il modo più breve che conosco per generare json valido dall'array di numeri interi è

let json = `[${cars}]`

per oggetti / array più generali (senza riferimenti circolari ) utilizzare JSON.stringify (auto)


1

perché il mio array era come sotto: e ho usato la funzione .push per crearlo dinamicamente

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

L'unico modo in cui ho convertito il mio array in json è

json = Object.assign({}, my_array);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.