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.


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.


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


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


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}));

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.


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

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"})

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.