Convertir un objet JS en chaîne JSON

1246

Si j'ai défini un objet dans JS avec:

var j={"name":"binchen"};

Comment puis-je convertir l'objet en JSON? La chaîne de sortie doit être:

'{"name":"binchen"}'
Bin Chen
la source
63
JSON.stringify()est la méthode que vous recherchez.
Gowtham Gopalakrishnan
11
Il y a toujours cette première fois où il faut l'apprendre.
Egan Wolf

Réponses:

1923

Tous les navigateurs actuels ont un support JSON natif intégré. Donc, tant que vous ne traitez pas avec des navigateurs préhistoriques comme IE6 / 7, vous pouvez le faire aussi facilement que cela:

var j = {
  "name": "binchen"
};
console.log(JSON.stringify(j));

Andris
la source
5
téléchargez ce script pour JSON.stringify(j);travailler
AabinGunz
2
Travailler sur nodejs car node utilise le même moteur
georgelviv
26
Cette réponse a été publiée un an avant la sortie d'IE9. Au moment de la rédaction, IE8 était effectivement un navigateur moderne, ou du moins c'était le plus récent IE disponible.
Andris
JSON.stringify ne convertit pas les objets imbriqués. Toute solution pour cela .. ??
Ritesh
9
Si vous avez besoin d'une chaîne json plus lisible, vous pouvez utiliser des paramètres d'espace commevar formattedJSON = JSON.stringify(j, null, 2);
Jacek Gzel
110

Avec JSON.stringify()trouvé dans json2.js ou natif dans la plupart des navigateurs modernes.

   JSON.stringify(value, replacer, space)
        value       any JavaScript value, usually an object or array.

       replacer    an optional parameter that determines how object
                    values are stringified for objects. It can be a
                    function or an array of strings.

       space       an optional parameter that specifies the indentation
                    of nested structures. If it is omitted, the text will
                    be packed without extra whitespace. If it is a number,
                    it will specify the number of spaces to indent at each
                    level. If it is a string (such as '\t' or ' '),
                    it contains the characters used to indent at each level.

       This method produces a JSON text from a JavaScript value.
Ignacio Vazquez-Abrams
la source
6
Pour un peu plus de clarté: replacer est optionnelle, donc si vous souhaitez toujours utiliser le spacearg que vous mettez nullpour replacer. Si vous êtes intéressé à utiliser cette fonction pour de jolies impressions, j'ai trouvé cette réponse également utile: stackoverflow.com/a/7220510/857209
Glenn Lawrence
34

Découvrez la manière mise à jour / meilleure par Thomas Frank:

Mise à jour du 17 mai 2008: petit désinfectant ajouté à la méthode toObject. Maintenant, toObject () n'évaluera pas () la chaîne s'il y trouve du code malveillant. Pour encore plus de sécurité: ne définissez pas l'indicateur includeFunctions sur true.

Douglas Crockford, père du concept JSON, a écrit l'un des premiers stringifiers pour JavaScript. Plus tard, Steve Yen de Trim Path a écrit une belle version améliorée que j'utilise depuis un certain temps. Ce sont mes changements dans la version de Steve que je voudrais partager avec vous. Fondamentalement, ils découlaient de mon souhait de faire le stringifier:

  • gérer et restaurer les références cycliques
  • inclure le code JavaScript pour les fonctions / méthodes (en option)
  • exclure les membres d'objet de Object.prototype si nécessaire.
Sarfraz
la source
24

Vous pouvez utiliser la méthode JSON.stringify () pour convertir un objet JSON en chaîne.

var j={"name":"binchen"};
JSON.stringify(j)

Pour le processus inverse, vous pouvez utiliser la méthode JSON.parse () pour convertir la chaîne JSON en objet JSON.

Aravindan Venkatesan
la source
Merci d'avoir ajouté le processus inverse.
David Lavieri
12

JSON.stringify(j, null, 4) vous donnerait JSON embellie au cas où vous auriez besoin d'embellissement aussi

Le deuxième paramètre est le remplaçant. Il peut être utilisé comme filtre où vous pouvez filtrer certaines valeurs clés lors de la chaîne. S'il est défini sur null, il renverra toutes les paires de valeurs clés

Vignesh Murugan
la source
11

Dans angularJS

angular.toJson(obj, pretty);

obj: entrée à sérialiser en JSON.

pretty (facultatif):
si la valeur est true, la sortie JSON contiendra des sauts de ligne et des espaces. Si elle est définie sur un entier, la sortie JSON contiendra autant d'espaces par retrait.

(par défaut: 2)

Nazrul Islam
la source
10

Si vous utilisez AngularJS, le filtre 'json' devrait le faire:

<span>{{someObject | json}}</span>
Ariel Cabib
la source
9

JSON.stringify transforme un objet Javascript en texte JSON et stocke ce texte JSON dans une chaîne.

La conversion est un objet en chaîne

JSON.parse transforme une chaîne de texte JSON en objet Javascript.

La conversion est une chaîne en objet

var j={"name":"binchen"};

pour en faire une chaîne JSON suivante pourrait être utilisée.

JSON.stringify({"key":"value"});

JSON.stringify({"name":"binchen"});

Pour plus d'informations, vous pouvez vous référer à ce lien ci-dessous.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

Dulith De Costa
la source
7

Une coutume définie pour cela, jusqu'à ce que nous fassions une étrange méthode de stringify

var j={"name":"binchen","class":"awesome"};
var dq='"';
var json="{";
var last=Object.keys(j).length;
var count=0;
for(x in j)
{
json += dq+x+dq+":"+dq+j[x]+dq;
count++;
if(count<last)
   json +=",";
}
json+="}";
document.write(json);

PRODUCTION

{"name":"binchen","class":"awesome"}

EN DIRECT http://jsfiddle.net/mailmerohit5/y78zum6v/

Rohit Kumar
la source
n'échappe pas aux chaînes avec des guillemets comme: "a \" dans une chaîne "
alphakevin
1
Ce code personnalisé est très incomplet. Ne prend pas en charge les tableaux, les objets et les caractères spéciaux. Exemple: les json {"arr": ["1", "2", "3"], "obj": {"a": "b"}, "key \" with \\ special} chars ":" value "} affichera {" arr ":" 1,2,3 "," obj ":" [Object object] "," key "avec \ special} chars": "value"} c'est faux!
Manuel Romeiro
7

J'avais des problèmes avec stringify à court de mémoire et d'autres solutions ne semblaient pas fonctionner (au moins, je ne pouvais pas les faire fonctionner), c'est quand je suis tombé sur ce fil. Grâce à Rohit Kumar, je viens de parcourir mon très grand objet JSON pour l'empêcher de planter

var j = MyObject;
var myObjectStringify = "{\"MyObject\":[";
var last = j.length
var count = 0;
for (x in j) {
    MyObjectStringify += JSON.stringify(j[x]);
    count++;
    if (count < last)
        MyObjectStringify += ",";
}
MyObjectStringify += "]}";

MyObjectStringify vous donnerait votre représentation de chaîne (comme mentionné à d'autres moments dans ce fil), sauf si vous avez un grand objet, cela devrait également fonctionner - assurez-vous de le construire pour répondre à vos besoins - J'avais besoin qu'il ait un nom plus que le tableau

Sam
la source
5

Woking ... Facile à utiliser

$("form").submit(function(evt){
  evt.preventDefault();
  var formData = $("form").serializeArray(); // Create array of object
  var jsonConvert = JSON.stringify(formData);  // Convert to json
});

Merci

Subroto Biswas
la source
3

vous pouvez utiliser la fonction native stringify comme celle-ci

const j={ "name": "binchen" }

/** convert json to string */
const jsonString = JSON.stringify(j)

console.log(jsonString) // {"name":"binchen"}

Alongkorn Chetasumon
la source
3

si vous voulez obtenir la valeur des propriétés json au format chaîne, utilisez la méthode suivante

var i = {"x":1}

var j = JSON.stringify(i.x);

var k = JSON.stringify(i);

console.log(j);

"1"

console.log(k);

'{"x":1}'
KARTHIKEYAN.A
la source
3

Pour le débogage dans Node JS, vous pouvez utiliser util.inspect () . Cela fonctionne mieux avec des références circulaires.

var util = require('util');
var j = {name: "binchen"};
console.log(util.inspect(j));
Pavel Netesa
la source
3

Les remplacements JSON existants étaient trop pour moi, j'ai donc écrit ma propre fonction. Cela semble fonctionner, mais j'ai peut-être manqué plusieurs cas marginaux (qui ne se produisent pas dans mon projet). Et ne fonctionnera probablement pas pour les objets préexistants, uniquement pour les données auto-créées.

function simpleJSONstringify(obj) {
    var prop, str, val,
        isArray = obj instanceof Array;

    if (typeof obj !== "object") return false;

    str = isArray ? "[" : "{";

    function quote(str) {
        if (typeof str !== "string") str = str.toString();
        return str.match(/^\".*\"$/) ? str : '"' + str.replace(/"/g, '\\"') + '"'
    }

    for (prop in obj) {
        if (!isArray) {
            // quote property
            str += quote(prop) + ": ";
        }

        // quote value
        val = obj[prop];
        str += typeof val === "object" ? simpleJSONstringify(val) : quote(val);
        str += ", ";
    }

    // Remove last colon, close bracket
    str = str.substr(0, str.length - 2)  + ( isArray ? "]" : "}" );

    return str;
}
Hauke
la source
2
So in order to convert a js object to JSON String: 

La syntaxe simple pour convertir un objet en chaîne est

JSON.stringify(value)

La syntaxe complète est: JSON.stringify (valeur [, replacer [, espace]])

Voyons quelques exemples simples. Notez que la chaîne entière obtient des guillemets doubles et toutes les données de la chaîne sont échappées si nécessaire.

JSON.stringify("foo bar"); // ""foo bar""
JSON.stringify(["foo", "bar"]); // "["foo","bar"]"
JSON.stringify({}); // '{}'
JSON.stringify({'foo':true, 'baz':false}); /* " 
{"foo":true,"baz":false}" */



const obj = { "property1":"value1", "property2":"value2"};
const JSON_response = JSON.stringify(obj);
console.log(JSON_response);/*"{ "property1":"value1", 
"property2":"value2"}"*/
Rahul Choudhary
la source
2
Ce serait bien si vous pouviez fournir une courte explication de votre code.
jonny
Cela ne fournit pas de réponse à la question. Une fois que vous avez une réputation suffisante, vous pourrez commenter n'importe quel message ; fournissez plutôt des réponses qui ne nécessitent aucune clarification de la part du demandeur . - De l'avis
Rafael
J'ai édité ma réponse, merci beaucoup d'avoir souligné @Rafael et @ jonny.
Rahul Choudhary
1

Utilisez simplement JSON.stringifypour effectuer une telle conversion - mais n'oubliez pas que les champs qui ont de la undefinedvaleur ne seront pas inclus dans json

var j={"name":"binchen", "remember":undefined, "age": null };

var s=JSON.stringify(j);

console.log(s);

Le champ remember«disparaît» de la sortie json

Kamil Kiełczewski
la source
Vous venez de me sauver la journée. Je n'ai pas pu enregistrer mon objet. la clé que les champs qui ont une valeur indéfinie ne seront pas inclus dans json a résolu mon problème!
Mohammad Ghonchesefidi, le
0

Vous pouvez utiliser la méthode JSON.stringify () pour convertir un objet JSON en chaîne.

var j={"name":"hello world"};
JSON.stringify(j);

Pour reconvertir cette chaîne en objet json, vous pouvez utiliser la méthode JSON.parse ().

realnikunj
la source
0

utilisation JSON.stringify(param1, param2, param3);

Quel est: -

param1 -> valeur à convertir en JSON

param2 -> fonction pour stringifier à votre façon. Alternativement, il sert de liste blanche pour laquelle les objets doivent être inclus dans le JSON final.

param3 -> Un type de données Number qui indique le nombre d'espaces à ajouter. Le maximum autorisé est de 10.

Deepak Agrawal
la source
0

convertir str => obj

const onePlusStr = '[{"brand": "oneplus"}, {"model": "7T"}]';

const onePLusObj = JSON.parse (onePlusStr);

convertir obj => str

const onePLusObjToStr = JSON.stringify (onePlusStr);

Références de l'analyse JSON dans JS:
JSON.parse (): cliquez sur
JSON.stringify (): cliquez sur

yash
la source
Pouvez-vous fournir plus d'informations? Références etc
Nodejs-nerd
Références de l'analyse JSON dans JS: JSON.parse (): w3schools.com/js/js_json_parse.asp JSON.stringify (): w3schools.com/js/js_json_stringify.asp
yash
merci, pouvez-vous modifier votre réponse pour l'inclure
Nodejs-nerd
0

Méthode très facile à utiliser, mais ne l'utilisez pas dans la version (en raison de problèmes de compatibilité possibles).

Idéal pour tester de votre côté.

Object.prototype.toSource()

//Usage:
obj.toSource();
Bodich
la source
0

Utilisez la fonction stringify

var j = {
"name":"binchen"
};

var j_json = JSON.stringify(j);

console.log("j in json object format :", j_json);

Bon codage !!!

Desire Kaleba
la source
0
//use JSON.stringify({})

const stringified = JSON.stringify ({}) // passe l'objet que vous voulez convertir au format chaîne

Geetanshu Gulati
la source
-1

Utilisez ceci,

var j={"name":"binchen"};
 var myJSON = JSON.stringify(j);
MKR
la source
-24

si vous avez une chaîne json et qu'elle n'est pas encapsulée avec [], enveloppez-la d'abord

var str = '{"city": "Tampa", "state": "Florida"}, {"city": "Charlotte", "state": "North Carolina"}';
str = '[' + str + ']';
var jsonobj = $.parseJSON(str);

OU

var jsonobj = eval('(' + str + ')');
console.log(jsonobj);
Bhaumik Mehta
la source
Le PO essaie d'aller dans l'autre sens. Votre question répond au cas inverse où il a une chaîne JSON et veut l'obtenir en tant qu'objet.
Joshua Snider
1
vous avez fait une chose inverse pour remettre en question .. vous devez utiliser la fonction JSON.stringfy ()
Hardik Patel