Question Convertir un objet en chaîne


Comment puis-je convertir un objet JavaScript en chaîne?

Exemple:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)

Sortie:

Object {a = 1, b = 2} // très belle sortie lisible :)
  Objet: [objet objet] // aucune idée de ce qui est à l'intérieur :(


793
2018-04-10 15:35


origine


Réponses:


Je recommanderais d'utiliser JSON.stringify, qui convertit l'ensemble des variables de l'objet en une chaîne JSON. La plupart des navigateurs modernes supportent nativement cette méthode, mais pour ceux qui ne le font pas, vous pouvez inclure un Version JS:

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);

1110
2018-04-10 15:44



Utilisez la fonction javascript String ().

 String(yourobject); //returns [object Object]

ou

JSON.stringify(yourobject)

.


82
2018-04-15 11:07



Bien sûr, pour convertir un objet en chaîne, vous devez utiliser votre propre méthode, par exemple:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

En fait, ce qui précède montre juste l'approche générale; vous voudrez peut-être utiliser quelque chose comme http://phpjs.org/functions/var_export:578 ou http://phpjs.org/functions/var_dump:604

ou, si vous n'utilisez pas de méthodes (fonctions en tant que propriétés de votre objet), vous pouvez utiliser le nouveau standard (mais pas implémenté dans les anciens navigateurs, bien que vous puissiez trouver un utilitaire pour le faire), JSON .stringify (). Mais encore une fois, cela ne fonctionnera pas si l'objet utilise des fonctions ou d'autres propriétés qui ne sont pas sérialisables en JSON.


80
2018-04-10 15:49



Rester simple avec console, vous pouvez simplement utiliser une virgule au lieu d'un +. le + va essayer de convertir l'objet en une chaîne, alors que la virgule l'affichera séparément dans la console.

Exemple:

var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

Sortie:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

Référence: https://developer.mozilla.org/en-US/docs/Web/API/Console.log


63
2018-01-07 16:23



MODIFIER  N'utilisez pas cette réponse car elle ne fonctionne pas dans Internet Explorer. Utilisation Gary Chambers Solution.

pour citer() est la fonction que vous recherchez qui l'écrira comme JSON.

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());

32
2018-04-10 15:40



Une option:

console.log('Item: ' + JSON.stringify(o));

o is printed as a string

Une autre option (comme soktinpk souligné dans les commentaires), et mieux pour le débogage console IMO:

console.log('Item: ', o);

o is printed as an object, which you could drill down if you had more fields


28
2018-06-19 05:42



Aucune des solutions ici n'a fonctionné pour moi. JSON.stringify semble être ce que beaucoup de gens disent, mais il coupe les fonctions et semble assez cassé pour certains objets et tableaux que j'ai essayés en le testant.

J'ai fait ma propre solution qui fonctionne dans Chrome au moins. L'afficher ici pour que quiconque regarde cela sur Google puisse le trouver.

//Make an object a string that evaluates to an equivalent object
//  Note that eval() seems tricky and sometimes you have to do
//  something like eval("a = " + yourString), then use the value
//  of a.
//
//  Also this leaves extra commas after everything, but JavaScript
//  ignores them.
function convertToText(obj) {
    //create an array that will later be joined into a string.
    var string = [];

    //is object
    //    Both arrays and objects seem to return "object"
    //    when typeof(obj) is applied to them. So instead
    //    I am checking to see if they have the property
    //    join, which normal objects don't have but
    //    arrays do.
    if (typeof(obj) == "object" && (obj.join == undefined)) {
        string.push("{");
        for (prop in obj) {
            string.push(prop, ": ", convertToText(obj[prop]), ",");
        };
        string.push("}");

    //is array
    } else if (typeof(obj) == "object" && !(obj.join == undefined)) {
        string.push("[")
        for(prop in obj) {
            string.push(convertToText(obj[prop]), ",");
        }
        string.push("]")

    //is function
    } else if (typeof(obj) == "function") {
        string.push(obj.toString())

    //all other values can be done with JSON.stringify
    } else {
        string.push(JSON.stringify(obj))
    }

    return string.join("")
}

EDIT: Je sais que ce code peut être amélioré, mais n'a jamais réussi à le faire. L'utilisateur andrey a suggéré une amélioration ici avec le commentaire:

Voici un petit code qui peut gérer 'null' et 'undefined', et qui n'ajoute pas de virgules excessives.

Utilisez-le à vos risques et périls puisque je ne l'ai pas vérifié du tout. N'hésitez pas à suggérer des améliorations supplémentaires en tant que commentaire.


20
2017-08-21 22:44