Jak rejestrujesz zawartość obiektu JSON w Node.js?

170

Czy można wydrukować zawartość obiektów, np. Metody i atrybuty w Node.js?

W tej chwili próbuję wydrukować obiekt sesji i uzyskać następujące informacje:

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

Może w podobny sposób jak print_r (tablica) w PHP lub używając .toString w Javie.

Jacek
źródło
9
console.log("Session:" + util.inspect(session))
Raynos
1
Aby uzyskać bardziej intuicyjne i wizualne wyświetlanie obiektów, spójrz na nodedump: github.com/ragamufin/nodedump
ragamufin

Odpowiedzi:

271

Spróbuj tego:

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

Jeśli obiekt można przekształcić w JSON, to zadziała.

Alexander Sulfrian
źródło
9
Próbuję to zrobić dla obiektu żądania, ale wyświetla błąd TypeError: Konwersja struktury kołowej na JSON Czy istnieje sposób na ograniczenie głębokości
Neil
tak czy inaczej, żeby ładnie to wydrukować?
chovy
5
@chovy: coś takiego może działać: console.log (JSON.stringify (json, null, 4));
Eric Brandel
1
to zadziałało dla mnie: console.log("Session: %O", session); developer.mozilla.org/en-US/docs/Web/API/…
JP Lew
Pracowałem dla mojej odpowiedzi API json! Dzięki
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 na MDN

ccgillett
źródło
1
zdecydowanie najlepsza odpowiedź +1!
dekoder7283
33

Aby uzyskać wynik bardziej podobny do surowego, console.log(obj)którego zwykle używam console.log('Status: ' + util.inspect(obj))(JSON jest nieco inny).

lapo
źródło
4
Daje to „użyteczność nie jest zdefiniowana”. Najpierw musisz `var util = require (" util "). Ponadto podobiekty nadal są wyświetlane jako [Object], a nie jako reprezentujący je ciąg JSON.
juanpaco
13
Aby usunąć ograniczenie głębokości, użyj:require('util').inspect(obj, {depth:null})
lapo
25

To zadziała z każdym obiektem:

    var util = require("util");
    console.log(util.inspect(myObject, {showHidden: false, depth: null}));
Marwen Trabelsi
źródło
2
Działa to świetnie w przypadku obiektów błędów. Żadna z ich właściwości nie pojawia się w pozostałych rozwiązaniach.
Chris
1
To po prostu wisi dla mnie. Myślę, że cykliczne odniesienia w obiekcie powodują jego awarię
Richard
@Richard prawdopodobnie zawiesił się (ed) ze względu na ustawioną opcję głębokości null. Inspect ma wbudowaną obsługę odniesień cyklicznych.
2grit
6

console.dir () jest najbardziej bezpośrednim sposobem.

rainabba
źródło
console.dir (someJsonObject); nadal pozostawia zagnieżdżone obiekty niezadrukowane.
nyarasha
1
Myślę, że nie będzie wiercić obiektów w ich prototypie i nie będzie zajmować się pewną rekurencją. Będziesz musiał zrobić coś takiego jak console.log (JSON.stringify ()) lub coś bardziej specyficznego dla twojego obiektu, jeśli .dir () nie jest wystarczające. Jeśli masz więcej informacji o obiekcie, być może możesz udzielić bardziej szczegółowych porad.
rainabba
Może mieć te same opcje, co util.inspect. Dodaj {depth: null}
nikc.org
0
console.log(obj);

Uruchom: node app.js> output.txt

Ростислав Борніцький
źródło
0

Będzie to dotyczyło większości obiektów wyświetlanych w konsoli nodejs

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

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

manoj kumar
źródło