Ich versuche, einen Weg zu pretty print
einer JavaScript-Datenstruktur in lesbarer Form zum Debuggen zu finden.
Ich habe eine ziemlich große und komplizierte Datenstruktur, die in JS gespeichert ist, und ich muss Code schreiben, um sie zu manipulieren. Um herauszufinden, was ich tue und wo ich falsch liege, muss ich wirklich in der Lage sein, die Datenstruktur in ihrer Gesamtheit zu sehen und sie zu aktualisieren, wenn ich Änderungen über die Benutzeroberfläche vornehme.
All diese Dinge kann ich selbst erledigen, abgesehen davon, dass ich einen guten Weg gefunden habe, eine JavaScript-Datenstruktur in eine für Menschen lesbare Zeichenfolge zu kopieren. JSON würde es tun, aber es muss wirklich gut formatiert und eingerückt sein. Normalerweise würde ich dafür Firebugs exzellentes DOM-Dumping-Material verwenden, aber ich muss wirklich in der Lage sein, die gesamte Struktur auf einmal zu sehen, was in Firebug nicht möglich zu sein scheint.
Anregungen sind willkommen.
Danke im Voraus.
Antworten:
Ich habe eine Funktion geschrieben, um ein JS-Objekt in lesbarer Form zu sichern, obwohl die Ausgabe nicht eingerückt ist, aber es sollte nicht zu schwierig sein, dies hinzuzufügen: Ich habe diese Funktion aus einer für Lua erstellten Funktion erstellt (die viel komplexer ist) ), die dieses Einrückungsproblem behandelt haben.
Hier ist die "einfache" Version:
Ich werde versuchen, es ein bisschen zu verbessern.
Hinweis 1: Um es zu verwenden, führen Sie
od = DumpObject(something)
od.dump aus. Gewunden, weil ich den len-Wert (Anzahl der Elemente) auch für einen anderen Zweck haben wollte. Es ist trivial, die Funktion nur die Zeichenfolge zurückgeben zu lassen.Hinweis 2: Es werden keine Schleifen in Referenzen behandelt.
BEARBEITEN
Ich habe die eingerückte Version gemacht.
Wählen Sie Ihre Einrückung in der Zeile mit dem rekursiven Aufruf aus, und Sie klammern den Stil, indem Sie die kommentierte Zeile nach dieser umschalten.
... Ich sehe, du hast deine eigene Version entwickelt, was gut ist. Besucher haben die Wahl.
quelle
Verwenden Sie Crockfords JSON.stringify wie folgt :
Variable
text
würde so aussehen:Dies erfordert übrigens nichts weiter als diese JS-Datei - sie funktioniert mit jeder Bibliothek usw.
quelle
JSON.stringify((function(){var x = []; x.push(x); return x})())
und bei vielen anderen Arten von Objekten fehlJSON.stringify(/foo/)
.Sie können Folgendes verwenden
quelle
In
Firebug
, wenn Sie nurconsole.debug ("%o", my_object)
können Sie in der Konsole darauf klicken und ein interaktives Objekt - Explorer eingeben. Es zeigt das gesamte Objekt und ermöglicht das Erweitern verschachtelter Objekte.quelle
Verwenden Sie für Node.js:
API-Dokumentation
quelle
Für diejenigen, die nach einer großartigen Möglichkeit suchen, Ihr Objekt zu sehen, besuchen Sie prettyPrint.js
Erstellt eine Tabelle mit konfigurierbaren Ansichtsoptionen, die irgendwo in Ihrem Dokument gedruckt werden sollen. Besser zu schauen als in der
console
.quelle
Ich programmiere gerade
Rhino
und war mit keiner der hier veröffentlichten Antworten zufrieden. Also habe ich meinen eigenen hübschen Drucker geschrieben:Die Ausgabe sieht folgendermaßen aus:
Ich habe es hier auch als Zusammenfassung für zukünftige Änderungen veröffentlicht.
quelle
jsDump
wird
QUnit (Unit-Testing-Framework von jQuery) mit leicht gepatchter Version von jsDump.
JSON.stringify () ist in einigen Fällen nicht die beste Wahl.
quelle
Ich übernahm PhiLhos Führung (vielen Dank :)) und schrieb schließlich meine eigene, da ich seine nicht dazu bringen konnte, das zu tun, was ich wollte. Es ist ziemlich rau und bereit, aber es macht den Job, den ich brauche. Vielen Dank für die hervorragenden Vorschläge.
Ich weiß, es ist kein brillanter Code, aber für das, was es wert ist, hier ist es. Jemand könnte es nützlich finden:
quelle
Dies ist wirklich nur ein Kommentar zu Jason Bunting "Use Crockford's JSON.stringify", aber ich konnte dieser Antwort keinen Kommentar hinzufügen.
Wie in den Kommentaren erwähnt, funktioniert JSON.stringify nicht gut mit der Prototype-Bibliothek (www.prototypejs.org). Es ist jedoch ziemlich einfach, sie gut zusammenspielen zu lassen, indem Sie die vom Prototyp hinzugefügte Array.prototype.toJSON-Methode vorübergehend entfernen, Crockfords stringify () ausführen und dann wie folgt zurücksetzen:
quelle
Ich fand die Reaktion von J. Buntings auf die Verwendung von JSON.stringify ebenfalls gut. Abgesehen davon können Sie JSON.stringify über das JSON-Objekt von YUIs verwenden, wenn Sie zufällig YUI verwenden. In meinem Fall musste ich in HTML sichern, damit es einfacher war, die PhiLho-Antwort zu optimieren / auszuschneiden / einzufügen.
quelle
Viele Leute schreiben Code in diesen Thread, mit vielen Kommentaren zu verschiedenen Fallstricken. Ich mochte diese Lösung, weil sie vollständig schien und eine einzelne Datei ohne Abhängigkeiten war.
Browser
nodejs
Es funktionierte "out of the box" und hat sowohl Knoten- als auch Browserversionen (vermutlich nur verschiedene Wrapper, aber ich habe nicht gegraben, um dies zu bestätigen).
Die Bibliothek unterstützt auch hübsches Drucken von XML, SQL und CSS, aber ich habe diese Funktionen nicht ausprobiert.
quelle
Ein einfaches zum Drucken der Elemente als Zeichenfolgen:
quelle
Meine NeatJSON- Bibliothek enthält sowohl Ruby- als auch JavaScript-Versionen . Es ist unter einer (zulässigen) MIT-Lizenz frei verfügbar. Sie können eine Online-Demo / Konverter unter folgender Adresse anzeigen:
http://phrogz.net/JS/neatjson/neatjson.html
Einige Funktionen (alle optional):
quelle
flexjson enthält eine hübschePrint () - Funktion, mit der Sie möglicherweise das bekommen, was Sie wollen.
quelle