Frage Konvertieren eines Objekts in eine Zeichenfolge


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 gut lesbare Ausgabe :)
  Artikel: [Objekt Objekt] // keine Ahnung, was drin ist :(


793
2018-04-10 15:35


Ursprung


Antworten:


Ich würde empfehlen, zu verwenden 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 a JS Version:

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);

1110
2018-04-10 15:44



Verwenden Sie Javascript String () -Funktion.

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

oder

JSON.stringify(yourobject)

.


82
2018-04-15 11:07



Um ein Objekt in einen String zu konvertieren, müssen Sie entweder eine eigene Methode verwenden, wie zum Beispiel:

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

Tatsächlich zeigt das Obige nur den allgemeinen Ansatz; Vielleicht möchten Sie etwas wie http://phpjs.org/functions/var_export:578 oder http://phpjs.org/functions/var_dump:604

oder, wenn Sie keine Methoden verwenden (Funktionen als Eigenschaften Ihres Objekts), können Sie möglicherweise den neuen Standard verwenden (aber nicht in älteren Browsern implementiert, obwohl Sie ein Dienstprogramm finden können, das ihnen dabei hilft), JSON .stringify (). Aber auch das funktioniert nicht, wenn das Objekt Funktionen oder andere Eigenschaften verwendet, die für JSON nicht serialisierbar sind.


80
2018-04-10 15:49



Einfach halten mit console, Sie können einfach ein Komma anstelle von einem verwenden +. Das + wird versuchen, das Objekt in eine Zeichenfolge zu konvertieren, während das Komma es in der Konsole separat anzeigt.

Beispiel:

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

Ausgabe:

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

Referenz: https://developer.mozilla.org/en-US/docs/Web/API/Console.log


63
2018-01-07 16:23



BEARBEITEN  Verwenden Sie diese Antwort nicht, da sie in Internet Explorer nicht funktioniert. Benutzen Gary Chambers Lösung.

toSource () ist die gesuchte Funktion, die sie als JSON ausgibt.

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

32
2018-04-10 15:40



Eine Option:

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

o is printed as a string

Andere Option (wie soktinpk in den Kommentaren hingewiesen), und besser für Konsolen-Debugging 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



Keine der Lösungen hier funktioniert für mich. JSON.stringify scheint 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. Veröffentlichen Sie es hier, damit jeder, der auf Google nachschaut, es finden kann.

//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: Ich weiß, dass dieser Code verbessert werden kann, aber nie dazu kam. Benutzer andrey schlug eine Verbesserung vor Hier mit dem Kommentar:

Hier ist ein etwas veränderter Code, der mit 'null' und 'undefiniert' umgehen kann und auch keine überflüssigen Kommas hinzufügt.

Verwenden Sie das auf eigene Gefahr, da ich es überhaupt nicht verifiziert habe. Fühlen Sie sich frei, irgendwelche zusätzlichen Verbesserungen als Kommentar vorzuschlagen.


20
2017-08-21 22:44