J'essaie de trouver un moyen de pretty print
créer une structure de données JavaScript sous une forme lisible par l'homme pour le débogage.
J'ai une structure de données plutôt grande et compliquée stockée dans JS et j'ai besoin d'écrire du code pour la manipuler. Afin de déterminer ce que je fais et où je me trompe, ce dont j'ai vraiment besoin, c'est de pouvoir voir la structure de données dans son intégralité et de la mettre à jour chaque fois que j'apporte des modifications via l'interface utilisateur.
Je peux gérer tout cela moi-même, en plus de trouver un bon moyen de vider une structure de données JavaScript dans une chaîne lisible par l'homme. JSON ferait l'affaire, mais il doit vraiment être bien formaté et indenté. J'utiliserais généralement l'excellent contenu de déchargement DOM de Firebug pour cela, mais j'ai vraiment besoin de pouvoir voir la structure entière à la fois, ce qui ne semble pas possible dans Firebug.
Toutes les suggestions sont les bienvenues.
Merci d'avance.
Réponses:
J'ai écrit une fonction pour vider un objet JS sous une forme lisible, bien que la sortie ne soit pas indentée, mais cela ne devrait pas être trop difficile à ajouter: j'ai créé cette fonction à partir de celle que j'ai faite pour Lua (qui est beaucoup plus complexe ) qui a géré ce problème d'indentation.
Voici la version "simple":
Je vais chercher à l'améliorer un peu.
Remarque 1: Pour l'utiliser, faites
od = DumpObject(something)
et utilisez od.dump. Alambiqué parce que je voulais aussi la valeur de len (nombre d'articles) dans un autre but. Il est trivial de faire en sorte que la fonction ne renvoie que la chaîne.Note 2: il ne gère pas les boucles dans les références.
ÉDITER
J'ai fait la version en retrait.
Choisissez votre indentation sur la ligne avec l'appel récursif, et accolade le style en basculant la ligne commentée après celle-ci.
... Je vois que vous avez créé votre propre version, ce qui est bien. Les visiteurs auront le choix.
la source
Utilisez le JSON.stringify de Crockford comme ceci:
La variable
text
ressemblerait à ceci:À propos, cela ne nécessite rien de plus que ce fichier JS - il fonctionnera avec n'importe quelle bibliothèque, etc.
la source
JSON.stringify((function(){var x = []; x.push(x); return x})())
et sur de nombreux autres types d'objetsJSON.stringify(/foo/)
.Vous pouvez utiliser ce qui suit
la source
Dans
Firebug
, si vous simplement,console.debug ("%o", my_object)
vous pouvez cliquer dessus dans la console et entrer dans un explorateur d'objets interactif. Il montre l'objet entier et vous permet de développer les objets imbriqués.la source
Pour Node.js, utilisez:
Documentation API
la source
Pour ceux qui recherchent un moyen génial de voir votre objet, consultez prettyPrint.js
Crée un tableau avec des options d'affichage configurables à imprimer quelque part sur votre document. Mieux vaut regarder que dans le
console
.la source
Je suis en programmation
Rhino
et je n'étais satisfait d'aucune des réponses publiées ici. J'ai donc écrit ma propre jolie imprimante:La sortie ressemble à ceci:
Je l'ai également publié sous forme de Gist ici pour les modifications futures qui pourraient être nécessaires.
la source
jsDump
devient
QUnit (Framework de test unitaire utilisé par jQuery) utilisant une version légèrement corrigée de jsDump.
JSON.stringify () n'est pas le meilleur choix dans certains cas.
la source
Prenant la direction de PhiLho (merci beaucoup :)), j'ai fini par écrire le mien car je ne pouvais pas tout à fait lui faire faire ce que je voulais. C'est assez dur et prêt, mais ça fait le travail dont j'ai besoin. Merci à tous pour les excellentes suggestions.
Ce n'est pas du code génial, je sais, mais pour ce que ça vaut, le voici. Quelqu'un pourrait le trouver utile:
la source
Ceci est vraiment juste un commentaire sur "Use Crockford's JSON.stringify" de Jason Bunting, mais je n'ai pas pu ajouter de commentaire à cette réponse.
Comme indiqué dans les commentaires, JSON.stringify ne fonctionne pas bien avec la bibliothèque Prototype (www.prototypejs.org). Cependant, il est assez facile de les faire bien jouer ensemble en supprimant temporairement la méthode Array.prototype.toJSON que le prototype ajoute, exécutez stringify () de Crockford, puis remettez-la comme ceci:
la source
Je pensais que la réponse de J. Buntings sur l'utilisation de JSON.stringify était également bonne. En passant, vous pouvez utiliser JSON.stringify via l'objet JSON de YUIs si vous utilisez YUI. Dans mon cas, je devais effectuer un vidage en HTML, il était donc plus facile de modifier / couper / coller la réponse PhiLho.
la source
Beaucoup de gens écrivent du code dans ce fil, avec de nombreux commentaires sur divers pièges. J'ai aimé cette solution car elle semblait complète et était un seul fichier sans dépendances.
navigateur
nodejs
Cela a fonctionné "hors de la boîte" et a à la fois des versions de nœud et de navigateur (probablement juste des wrappers différents mais je n'ai pas creusé pour confirmer).
La bibliothèque prend également en charge les jolies impressions XML, SQL et CSS, mais je n'ai pas essayé ces fonctionnalités.
la source
Un simple pour imprimer les éléments sous forme de chaînes:
la source
Ma bibliothèque NeatJSON a à la fois des versions Ruby et JavaScript . Il est disponible gratuitement sous une licence MIT (permissive). Vous pouvez voir une démo / convertisseur en ligne à l' adresse :
http://phrogz.net/JS/neatjson/neatjson.html
Certaines fonctionnalités (toutes facultatives):
la source
flexjson inclut une fonction prettyPrint () qui peut vous donner ce que vous voulez.
la source