Wie protokollieren Sie den Inhalt eines JSON-Objekts in Node.js?


170

Ist es möglich, den Inhalt eines Objekts, z. B. Methoden und Attribute, in Node.js zu drucken?

Im Moment versuche ich, das Sitzungsobjekt zu drucken und Folgendes zu erhalten:

console.log("Session:" + session);
> Session:[object Object]

Möglicherweise ähnlich wie print_r (Array) in PHP oder mit .toString in Java.


9
console.log("Session:" + util.inspect(session))
Raynos

1
Eine intuitivere und visuellere Ausgabe von Objekten finden Sie unter nodedump: github.com/ragamufin/nodedump
ragamufin

Antworten:


271

Probier diese:

console.log("Session: %j", session);

Wenn das Objekt in JSON konvertiert werden könnte, funktioniert das.


9
Ich versuche dies für das Anforderungsobjekt zu tun, aber es zeigt den Fehler TypeError: Konvertieren der kreisförmigen Struktur in JSON Gibt es eine Möglichkeit, die Tiefe zu begrenzen
Neil

trotzdem hübsch zu drucken?
Chovy

5
@chovy: so etwas könnte funktionieren: console.log (JSON.stringify (json, null, 4));
Eric Brandel

1
Das hat bei mir funktioniert: console.log("Session: %O", session); developer.mozilla.org/en-US/docs/Web/API/…
JP Lew

Arbeitete für meine json API Antwort! Danke
Rodrigorf

128
function prettyJSON(obj) {
    console.log(JSON.stringify(obj, null, 2));
}

// obj -> value to convert to a JSON string
// null -> (do nothing)
// 2 -> 2 spaces per indent level

JSON.stringify auf MDN


1
bei weitem die beste Antwort +1!
decoder7283

33

Um eine Ausgabe zu erhalten, die der von console.log(obj)mir normalerweise verwendeten Rohdaten ähnlicher ist console.log('Status: ' + util.inspect(obj))(JSON unterscheidet sich geringfügig).


4
Dies ergibt "util ist nicht definiert". Sie müssen zuerst `var util = require (" util "). Außerdem werden die Unterobjekte weiterhin als [Objekt] und nicht als JSON-Zeichenfolge dargestellt, die sie darstellt.
Juanpaco

13
Um die Tiefenbegrenzung require('util').inspect(obj, {depth:null})
aufzuheben

25

Dies funktioniert mit jedem Objekt:

    var util = require("util");
    console.log(util.inspect(myObject, {showHidden: false, depth: null}));

2
Dies funktioniert hervorragend für Fehlerobjekte. Keine ihrer Eigenschaften zeigt sich in den anderen Lösungen.
Chris

1
Das hängt nur für mich. Ich denke, Zirkelverweise in einem Objekt stürzen ab
Richard

@Richard es hängt wahrscheinlich für Sie (ed), da die Tiefenoption auf gesetzt ist null. Inspect verfügt über eine integrierte Behandlung für Zirkelverweise.
2grit

6

console.dir () ist der direkteste Weg.


console.dir (someJsonObject); verschachtelte Objekte bleiben für mich immer noch unbedruckt.
Nyarasha

1
Ich denke, es wird keine Objekte durch ihren Prototyp bohren und es wird sich nicht mit einer bestimmten Rekursion befassen. Sie müssen entweder etwas wie console.log (JSON.stringify ()) oder etwas Spezifischeres für Ihr Objekt tun, wenn .dir () nicht ausreicht. Wenn Sie weitere Informationen zu dem Objekt haben, können Sie möglicherweise spezifischere Ratschläge geben.
rainabba

Es können dieselben Optionen wie bei util.inspect verwendet werden. Fügen Sie {Tiefe: null}
nikc.org


0

Dies gilt für die meisten Objekte zur Ausgabe in der NodeJS-Konsole

var util = require('util')
function print (data){
  console.log(util.inspect(data,true,12,true))
  
}

print({name : "Your name" ,age : "Your age"})

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.