Convertir un tableau en JSON


383

J'ai un tableau var cars = [2,3,..]qui contient quelques entiers. J'ai ajouté quelques valeurs au tableau, mais je dois maintenant envoyer ce tableau à une page via la .getméthode de jQuery . Comment puis-je le convertir en objet JSON pour l'envoyer?


Juste une double vérification: le tableau que vous souhaitez envoyer à la page est-il un tableau JavaScript ou est-il sur le serveur?
Ian Oxley

c'est un tableau Javascript, je l'enverrai à un script Python et Python utilisera la chaîne JSON et fonctionnera avec.
dotty

Réponses:


657

Script de rétrocompatibilité: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Et appelez:

var myJsonString = JSON.stringify(yourArray);

Remarque: l' objet JSON fait désormais partie de la plupart des navigateurs Web modernes (IE 8 et versions ultérieures). Voir caniuse pour la liste complète. Nous remercions: @Spudley pour son commentaire ci-dessous


5
Cela fonctionne, jQuery a-t-il une fonction comme celle-ci? Je préfère ne pas joindre un autre fichier js si jQuery a déjà une fonction.
dotty

1
jQuery a l'implémentation de JSON.parse dans 1.4.1, mais pas JSON.stringify ... Si vous minimisez json2.js son <3k je pense.
gnarf

6
Ouais, j'ai été surpris que jQuery n'ait pas intégré cela aussi
JonoW

120
pour tous ceux qui lisent encore cette réponse, il convient de souligner que tous les navigateurs modernes incluent l' JSONobjet en standard, ce qui signifie que vous n'avez pas besoin de ce script, sauf si vous prévoyez de prendre en charge des navigateurs plus anciens comme IE7 ou Firefox 3.0. Voir CanIUse pour le tableau de support.
Spudley

1
Il convient de souligner que vous pouvez le faire dans une console de navigateur: var a = [paste]; JSON.stringify (a)
Michael Cole

70

Je l'ai fait de cette façon:

si j'ai:

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

pour convertir pluginArrayArg (qui est un tableau javascript pur) en tableau JSON:

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

1
Tu m'as sauvé la vie
MD. Shafayatul Haque

45

Wow, il semble que c'est devenu beaucoup plus facile de nos jours ... 3 façons de le faire:

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

J'ai décidé d'utiliser la bibliothèque json2 et j'ai eu une erreur sur les «structures de données cycliques».

Je l'ai résolu en disant à json2 comment convertir mon objet complexe. Non seulement cela fonctionne maintenant, mais j'ai également inclus uniquement les champs dont j'ai besoin. Voici comment je l'ai fait:

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 essayez de définir le tableau en tant qu'objet. (var cars = {};) Ensuite, il n'est pas nécessaire de convertir en json. Cela pourrait ne pas être pratique dans votre exemple mais cela a bien fonctionné pour moi.


4

Une autre façon pourrait être la suivante:

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

        var json_string = JSON.stringify(json_arr);

1

Si vous n'avez qu'un seul objet comme celui que vous avez demandé, ce qui suit fonctionnera.

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

1

Le moyen le plus court que je connaisse pour générer un json valide à partir d'un tableau d'entiers est

let json = `[${cars}]`

pour un objet / tableau plus général (sans références circulaires ), utilisez JSON.stringify (cars)


1

parce que mon tableau était comme ci-dessous: et j'ai utilisé la fonction .push pour le créer dynamiquement

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

La seule façon dont j'ai converti mon tableau en json est

json = Object.assign({}, my_array);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.