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.

Jack
quelle
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.

Alexander Sulfrian
quelle
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

ccgillett
quelle
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).

Lapo
quelle
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}));
Marwen Trabelsi
quelle
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.

rainabba
quelle
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
console.log(obj);

Führen Sie Folgendes aus: Knoten app.js> output.txt

Ростислав Борніцький
quelle
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"})

Manoj Kumar
quelle