Wie kann ich ein JavaScript-Objekt in eine Zeichenfolge konvertieren?
Beispiel:
var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Ausgabe:
Objekt {a = 1, b = 2} // sehr schöne lesbare Ausgabe :)
Element: [Objekt Objekt] // keine Ahnung, was drin ist :(
javascript
string
object
serialization
tostring
user680174
quelle
quelle
console.log("Item", obj);
. Keine Notwendigkeit für etwas Kompliziertes.Antworten:
Ich würde die Verwendung empfehlen
JSON.stringify
, die die Menge der Variablen im Objekt in eine JSON-Zeichenfolge konvertiert. Die meisten modernen Browser unterstützen diese Methode nativ, aber für diejenigen, die dies nicht tun, können Sie eine JS-Version einschließen :quelle
foo: function () {...}
.JSON.stringify(obj, null, 2);
für eine schönere Ausgabe verwenden.Verwendung JavaScript String () Funktion
oder stringify ()
quelle
JSON.stringify(yourobject)
Dienstmädchen meinen Tag!Um ein Objekt in eine Zeichenfolge zu konvertieren, müssen Sie entweder Ihre eigene Methode verwenden, z.
Tatsächlich zeigt das Obige nur den allgemeinen Ansatz; Möglicherweise möchten Sie etwas wie http://phpjs.org/functions/var_export:578 oder http://phpjs.org/functions/var_dump:604 verwenden
Wenn Sie keine Methoden verwenden (Funktionen als Eigenschaften Ihres Objekts), können Sie möglicherweise den neuen Standard verwenden (der jedoch in älteren Browsern nicht implementiert ist, obwohl Sie auch ein Hilfsprogramm finden, das Ihnen dabei hilft), JSON .stringify (). Dies funktioniert jedoch nicht, wenn das Objekt Funktionen oder andere Eigenschaften verwendet, die für JSON nicht serialisierbar sind.
quelle
Um es einfach zu halten
console
, können Sie einfach ein Komma anstelle von a verwenden+
. Der+
versucht, das Objekt in eine Zeichenfolge zu konvertieren, während das Komma es separat in der Konsole anzeigt.Beispiel:
Ausgabe:
Referenz: https://developer.mozilla.org/en-US/docs/Web/API/Console.log
quelle
console.log(o)
? Wenn Sie versuchen, ein Objekt zu protokollieren, das einer Zeichenfolge hinzugefügt wurde, wirdtoString()
das Objekt tatsächlich aufgerufen .console.log
Letztendlich wird etwas genannt,Printer
das in der Spezifikation vermerkt ist: "Wie die Implementierung Argumente druckt, hängt von der Implementierung ab" - was bedeutet, dass jeder Browser dies anders machen kann (siehe console.spec.whatwg.org/#printer ). Firefox zeigt Objekte als Zeichenfolge an, die jedoch schön gefärbt sind. Chrome zeigt das Objekt als interaktive Gruppe an, die Sie erweitern können, um die Eigenschaften anzuzeigen. Versuche es!console.log('Item: ', o);
immer nochItem: [object Object]
.console.log
können Sieconsole.dir(o)
das Javascript-Objekt drucken, anstatt es als Zeichenfolge zu drucken. In den Entwicklertools können Sie so das Objekt öffnen und alle Eigenschaften überprüfen, auch Arrays. (siehe: developer.mozilla.org/de/docs/Web/API/Console/dir )BEARBEITEN Verwenden Sie diese Antwort nicht, da sie in Internet Explorer nicht funktioniert. Verwenden Sie die Gary Chambers- Lösung.
toSource () ist die gesuchte Funktion, die sie als JSON ausgibt .
quelle
toSource()
funktioniert es im IE nicht.toSource()
ist kein anerkannter Standard und kann daher nicht in allen Browsern unterstützt werden.Eine Option :
console.log('Item: ' + JSON.stringify(o));
Eine weitere Option (wie soktinpk in den Kommentaren hervorhob ) und besser für das Debuggen von IMO-Konsolen:
console.log('Item: ', o);
quelle
Keine der Lösungen hier hat bei mir funktioniert. JSON.stringify scheint das zu sein, was viele Leute sagen, aber es schneidet Funktionen aus und scheint für einige Objekte und Arrays, die ich beim Testen ausprobiert habe, ziemlich kaputt zu sein.
Ich habe meine eigene Lösung entwickelt, die zumindest in Chrome funktioniert. Wenn Sie es hier veröffentlichen, kann es jeder finden, der es bei Google nachschlägt.
EDIT: Ich weiß, dass dieser Code verbessert werden kann, bin aber nie dazu gekommen. Benutzer andrey vorgeschlagen , eine Verbesserung hier mit der Bemerkung:
Verwenden Sie dies auf eigenes Risiko, da ich es überhaupt nicht überprüft habe. Fühlen Sie sich frei, zusätzliche Verbesserungen als Kommentar vorzuschlagen.
quelle
,
am Ende jedes Objekts / Arrays befindet sich ein Trailing .Wenn Sie nur auf der Konsole ausgeben, können Sie verwenden
console.log('string:', obj)
. Beachten Sie das Komma .quelle
console.log
wird häufig angezeigt, nachdem AJAX das Array parallel mit Daten versorgt hat, was zu irreführenden Ergebnissen führt. In solchen Fällen ist das Klonen oder Serialisieren von Objekten der richtige Weg: Da wir duplizierte Objekte protokolliert haben, werden "alte" Daten gefüllt, selbst wenn AJAX seine Arbeit beendet.In Fällen, in denen Sie wissen, dass das Objekt nur ein Boolescher Wert, ein Datum, eine Zeichenfolge, eine Zahl usw. ist, funktioniert die Javascript-Funktion String () einwandfrei. Ich fand dies kürzlich nützlich im Umgang mit Werten, die aus der $ .each-Funktion von jquery stammen.
Zum Beispiel würde das Folgende alle Elemente in "Wert" in eine Zeichenfolge konvertieren:
Weitere Details hier:
http://www.w3schools.com/jsref/jsref_string.asp
quelle
var my_string = ''+value+'';
quelle
Ich suchte danach und schrieb eine tiefe rekursive mit Einrückung:
Verwendungszweck :
objToString({ a: 1, b: { c: "test" } })
quelle
if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }
Zirkelverweisen verhindern möchten, die Funktion hinzufügen können, wobei MAX_DEPTH_LEVEL die von Ihnen gewählte maximale Anzahl von Objektebenen ist, in dieWenn Sie nur das Objekt zum Debuggen anzeigen möchten, können Sie es verwenden
quelle
1.
2.
quelle
JSON-Methoden sind dem Grundelement der Gecko-Engine .toSource () weit unterlegen.
Vergleichstests finden Sie in der Antwort des SO-Artikels .
Die obige Antwort bezieht sich auch auf http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html, das wie JSON (das der andere Artikel http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json verwendet über "ExtJs JSON-Codierungsquellcode" ) kann keine Zirkelverweise verarbeiten und ist unvollständig. Der folgende Code zeigt die (gefälschten) Einschränkungen (korrigiert, um Arrays und Objekte ohne Inhalt zu behandeln).
( direkter Link zum Code in //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )
welches anzeigt:
und
und
quelle
In den vorhandenen Antworten fehlt tatsächlich eine einfache Option (für aktuelle Browser und Node.js):
Ich würde dies vorziehen, da
JSON.stringify()
es bestimmte Einschränkungen gibt (z. B. bei kreisförmigen Strukturen).quelle
Es scheint, dass JSON den zweiten Parameter akzeptiert, der bei Funktionen helfen könnte - Ersetzer , dies löst das Problem der Konvertierung auf eleganteste Weise:
quelle
Wenn Sie sich nur für Zeichenfolgen, Objekte und Arrays interessieren:
quelle
stringify-object
ist eine gute npm-Bibliothek, die vom yeoman-Team erstellt wurde: https://www.npmjs.com/package/stringify-objectdann:
Offensichtlich ist es nur interessant, wenn Sie ein kreisförmiges Objekt haben, mit dem Sie versagen würden
JSON.stringify();
quelle
Schauen Sie sich das jQuery-JSON- Plugin an
Im Kern verwendet es JSON.stringify, greift jedoch auf seinen eigenen Parser zurück, wenn der Browser dies nicht implementiert.
quelle
Da Firefox ein Objekt nicht als Bildschirmobjekt stringifiziert; wenn Sie möchten , um das gleiche Ergebnis haben , wie zum Beispiel:
JSON.stringify(obj)
:quelle
Für nicht verschachtelte Objekte:
quelle
Da Javascript v1.0 überall funktioniert (auch im Internet Explorer), ist dies ein nativer Ansatz, der ein sehr individuelles Erscheinungsbild Ihres Objekts beim Debuggen und in der Produktion ermöglicht. Https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / Object / toString
Nützliches Beispiel
Auch als Bonus
quelle
Wenn Sie lodash verwenden können, können Sie dies folgendermaßen tun:
Mit lodash
map()
können Sie auch Objekte durchlaufen . Dadurch wird jeder Schlüssel- / Werteintrag seiner Zeichenfolgendarstellung zugeordnet:Und
join()
setzen Sie die Array-Einträge zusammen.Wenn Sie ES6 Template String verwenden können, funktioniert dies auch:
Bitte beachten Sie, dass dies nicht durch das Objekt rekursiv geht:
Wie Knoten
util.inspect()
tun:quelle
Wenn Sie das Dojo-Javascript-Framework verwenden, gibt es dafür bereits eine integrierte Funktion: dojo.toJson (), die so verwendet wird.
Dies wird eine Zeichenfolge zurückgeben. Wenn Sie das Objekt in JSON-Daten konvertieren möchten, fügen Sie einen zweiten Parameter von true hinzu.
http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson
quelle
zu verwendendes Beispiel:
your_object1.txt:
your_object2.txt:
quelle
Für Ihr Beispiel denke ich,
console.log("Item:",o)
wäre am einfachsten. Aberconsole.log("Item:" + o.toString)
würde auch funktionieren.Bei Verwendung der ersten Methode wird ein schönes Dropdown-Menü in der Konsole verwendet, sodass ein langes Objekt gut funktioniert.
quelle
quelle
Ich hoffe, dieses Beispiel hilft all jenen, die alle an einer Reihe von Objekten arbeiten
quelle
Wenn Sie nicht spielen möchten, verbinden Sie () mit Object.
quelle
Wenn Sie eine minimalistische Methode zum Konvertieren einer Variablen in eine Zeichenfolge für eine Situation mit Inline-Ausdruckstypen
''+variablename
wünschen , ist dies die beste, die ich je gespielt habe.Wenn 'Variablenname' ein Objekt ist und Sie die Verkettungsoperation für leere Zeichenfolgen verwenden, wird dies ärgerlich
[object Object]
. In diesem Fall möchten Sie wahrscheinlich die enorm positiv bewerteteJSON.stringify
Antwort von Gary C. auf die gestellte Frage, über die Sie im Mozilla Developer Network lesen können unter dem Link in dieser Antwort oben .quelle