Comment puis-je convertir un objet JavaScript en chaîne?
Exemple:
var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Production:
Object {a = 1, b = 2} // très belle sortie lisible :)
Item: [objet Object] // aucune idée de ce qu'il y a à l'intérieur :(
javascript
string
object
serialization
tostring
user680174
la source
la source
console.log("Item", obj);
. Pas besoin de quoi que ce soit de compliqué.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 prennent en charge cette méthode de manière native, mais pour ceux qui ne le font pas, vous pouvez inclure une version JS :la source
foo: function () {...}
.JSON.stringify(obj, null, 2);
pour une sortie plus jolie.Utilisation javascript String () fonction
ou stringify ()
la source
JSON.stringify(yourobject)
bonne ma journée!Bien sûr, pour convertir un objet en chaîne, vous devez soit utiliser votre propre méthode, telle que:
En fait, ce qui précède montre juste l'approche générale; vous souhaiterez 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 pourrez peut-être utiliser le nouveau standard (mais pas implémenté dans les navigateurs plus anciens, bien que vous puissiez trouver un utilitaire pour vous y aider également), 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.
la source
Pour
console
rester simple avec , vous pouvez simplement utiliser une virgule au lieu d'un+
. Le+
va essayer de convertir l'objet en une chaîne, tandis que la virgule l'affichera séparément dans la console.Exemple:
Production:
Référence: https://developer.mozilla.org/en-US/docs/Web/API/Console.log
la source
console.log(o)
:? Étant donné que si vous essayez de consigner un objet ajouté à une chaîne, il appelle en faittoString()
l'objet.console.log
appelle finalement quelque chose appelé cePrinter
que la spécification note: "La façon dont l'implémentation imprime les arguments dépend de l'implémentation" - ce qui signifie que chaque navigateur peut faire cela différemment (voir console.spec.whatwg.org/#printer ). Firefox affichera les objets sous forme de chaîne, mais joliment colorés. Chrome affichera l'objet sous forme de groupe interactif que vous pourrez développer pour voir les propriétés. Essaie!console.log('Item: ', o);
est toujoursItem: [object Object]
.console.log
vous pouvez utiliserconsole.dir(o)
pour imprimer l'objet javascript à la place pour l'imprimer en tant que chaîne. Dans les outils de développement, cela permet d'ouvrir l'objet et de vérifier toutes les propriétés, même les tableaux. (voir: developer.mozilla.org/de/docs/Web/API/Console/dir )EDIT N'utilisez pas cette réponse car elle ne fonctionne pas dans Internet Explorer. Utilisez Gary Chambers solution .
toSource () est la fonction que vous recherchez qui l'écrira en JSON.
la source
toSource()
ne fonctionne pas dans IE.toSource()
n'est pas un standard reconnu, il n'est donc pas garanti qu'il soit pris en charge par tous les navigateurs.Une option :
console.log('Item: ' + JSON.stringify(o));
Une autre option (comme l' a souligné soktinpk dans les commentaires), et mieux pour le débogage de la console IMO:
console.log('Item: ', o);
la source
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 lors du test.
J'ai créé ma propre solution qui fonctionne au moins dans Chrome. Le publier ici pour que toute personne qui le recherche sur Google puisse le trouver.
EDIT: Je sais que ce code peut être amélioré, mais je n'ai jamais réussi à le faire. L'utilisateur andrey a suggéré une amélioration ici avec le commentaire:
Utilisez-le à vos risques et périls car je ne l'ai pas vérifié du tout. N'hésitez pas à suggérer des améliorations supplémentaires en tant que commentaire.
la source
,
à la fin de chaque objet / tableau.Si vous sortez simplement sur la console, vous pouvez utiliser
console.log('string:', obj)
. Remarquez la virgule .la source
console.log
est souvent affichée après que AJAX a fini de fournir la baie de données en parallèle, ce qui conduit à des résultats trompeurs. Dans de tels cas, le clonage ou la sérialisation d'objets est la voie à suivre: puisque nous avons enregistré l'objet dupliqué, même lorsque AJAX a terminé son travail, il remplira les "anciennes" données.Dans les cas où vous savez que l'objet est juste un booléen, une date, une chaîne, un nombre, etc. La fonction javascript String () fonctionne très bien. J'ai récemment trouvé cela utile pour gérer les valeurs provenant de la fonction $ .each de jquery.
Par exemple, ce qui suit convertirait tous les éléments de "valeur" en une chaîne:
Plus de détails ici:
http://www.w3schools.com/jsref/jsref_string.asp
la source
var my_string = ''+value+'';
la source
Je cherchais cela, et j'en ai écrit une profonde récursive avec indentation:
Utilisation:
objToString({ a: 1, b: { c: "test" } })
la source
if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }
la fonction, MAX_DEPTH_LEVEL étant le nombre maximum de couches d'objets que vous avez choisi pour creuser.Si vous souhaitez simplement voir l'objet à déboguer, vous pouvez utiliser
la source
1.
2.
la source
Les méthodes JSON sont assez inférieures à la primitive .toSource () du moteur Gecko.
Voir la réponse de l'article SO pour les tests de comparaison.
De plus, la réponse ci-dessus fait référence à http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html qui, comme JSON, (que l'autre article http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json utilise via "ExtJs JSON encode code source" ) ne peut pas gérer les références circulaires et est incomplet. Le code ci-dessous montre ses limites (usurpation) (corrigées pour gérer les tableaux et les objets sans contenu).
( lien direct vers le code dans //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )
qui affiche:
et
et
la source
Il y a en fait une option simple (pour les navigateurs récents et Node.js) manquante dans les réponses existantes:
Je préférerais cela car il
JSON.stringify()
a certaines limites (par exemple avec des structures circulaires).la source
Il semble que JSON accepte le deuxième paramètre qui pourrait aider avec les fonctions - remplaçant , cela résout le problème de la conversion de la manière la plus élégante:
la source
Si vous ne vous souciez que des chaînes, des objets et des tableaux:
la source
stringify-object
est une bonne bibliothèque npm créée par l'équipe yeoman: https://www.npmjs.com/package/stringify-objectpuis:
Évidemment, c'est intéressant seulement si vous avez un objet circulaire qui échouerait avec
JSON.stringify();
la source
Jetez un oeil au plugin jQuery-JSON
À la base, il utilise JSON.stringify mais revient à son propre analyseur si le navigateur ne l'implémente pas.
la source
Comme firefox ne stringifie pas un objet en tant qu'objet écran; si vous voulez avoir le même résultat tel que
JSON.stringify(obj)
:la source
Pour les objets non imbriqués:
la source
Étant donné que Javascript v1.0 fonctionne partout (même IE), il s'agit d'une approche native et permet une apparence très personnalisée de votre objet lors du débogage et de la production https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / Object / toString
Exemple utile
Aussi, en bonus
la source
Si vous pouvez utiliser lodash, vous pouvez le faire de cette façon:
Avec lodash,
map()
vous pouvez également parcourir les objets. Cela mappe chaque entrée de clé / valeur à sa représentation sous forme de chaîne:Et
join()
regroupez les entrées du tableau.Si vous pouvez utiliser ES6 Template String, cela fonctionne également:
Veuillez noter que cela ne passe pas récursivement par l'objet:
Comme le
util.inspect()
fera le nœud :la source
Si vous utilisez le framework javascript Dojo, il existe déjà une fonction intégrée pour le faire: dojo.toJson () qui serait utilisée de la sorte.
qui renverra une chaîne. Si vous souhaitez convertir l'objet en données json, ajoutez un deuxième paramètre true.
http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson
la source
exemple à utiliser:
votre_objet1.txt:
votre_objet2.txt:
la source
Pour votre exemple, je pense que ce
console.log("Item:",o)
serait plus facile. Mais,console.log("Item:" + o.toString)
cela fonctionnerait aussi.L'utilisation de la méthode numéro un utilise une belle liste déroulante dans la console, donc un long objet fonctionnerait bien.
la source
la source
J'espère que cet exemple aidera tous ceux qui travaillent tous sur un tableau d'objets
la source
Si vous ne jouez pas, joignez () à Object.
la source
Références circulaires
En utilisant ci - dessous succédané nous pouvons produire JSON moins redondante - si l' objet source contient plusieurs références à un objet, ou contient des références circulaires - nous référençons par chemin de chaîne spéciale (similaire à JSONPath ) - nous l' utilisons comme suit
Afficher l'extrait de code
BONUS : et voici la fonction inverse d'une telle sérialisation
Afficher l'extrait de code
la source