Как вы регистрируете содержимое объекта JSON в Node.js?

171

Можно ли напечатать содержимое объектов, например, методы и атрибуты в Node.js?

В данный момент я пытаюсь распечатать объект сеанса и получить следующее:

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

Может быть, аналогично print_r (массив) в PHP, или с помощью .toString в Java.

разъем
источник
9
console.log("Session:" + util.inspect(session))
Рейнос
1
Для более наглядного и визуального вывода объектов взгляните на nodedump: github.com/ragamufin/nodedump
ragamufin

Ответы:

271

Попробуй это:

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

Если объект может быть преобразован в JSON, это будет работать.

Александр Сульфриан
источник
9
Я пытаюсь сделать это для объекта запроса, но он показывает ошибку TypeError: Преобразование круговой структуры в JSON Есть ли способ ограничить глубину
Нил
в любом случае, чтобы хорошенько напечатать это?
Чови
6
@chovy: что-то вроде этого может работать: console.log (JSON.stringify (json, null, 4));
Эрик Брандел
1
это работает для меня: console.log("Session: %O", session); developer.mozilla.org/en-US/docs/Web/API/...
JP Лью
Работал на мой ответ API JSON! Спасибо
Родригорф
130
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 на MDN

ccgillett
источник
1
безусловно лучший ответ +1!
decoder7283
33

Чтобы получить вывод, более похожий на исходный код, который console.log(obj)я обычно использую console.log('Status: ' + util.inspect(obj))(JSON немного отличается).

Лапо
источник
4
Это дает "Утилита не определена". Сначала вы должны `var util = require (" util "). Кроме того, подобъекты по-прежнему имеют вид [Object], а не строку JSON, которая их представляет.
Джуанпако
13
Чтобы снять ограничение по глубине, используйте:require('util').inspect(obj, {depth:null})
Lapo
25

Это будет работать с любым объектом:

    var util = require("util");
    console.log(util.inspect(myObject, {showHidden: false, depth: null}));
Марвен Трабелси
источник
2
Это прекрасно работает для объектов ошибок. Ни одно из их свойств не проявляется в других решениях.
Крис
1
Это просто висит для меня. Я думаю, что циклические ссылки в объекте сбивают его
Ричард
@Richard это, вероятно, зависает (ed) для вас из-за опции глубины, установленной на null. Inspect имеет встроенную обработку для циклических ссылок.
2
6

console.dir () - самый прямой путь.

rainabba
источник
console.dir (someJsonObject); все еще оставляет вложенные объекты без печати, для меня.
няраша
1
Я думаю, что он не будет углубляться в объекты через их прототип и не будет иметь дело с определенной рекурсией. Вам нужно будет сделать что-то вроде console.log (JSON.stringify ()) или что-то более специфичное для вашего объекта, если .dir () недостаточно. Если у вас есть больше информации об объекте, возможно, можно дать более конкретный совет.
Rainabba
Может принимать те же параметры, что и util.inspect. Добавить {глубину:
ноль
0
console.log(obj);

Запустите: узел app.js> output.txt

Ростислав Борніцький
источник
0

Это будет для большинства объектов для вывода в консоли nodejs

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

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

Манодж Кумар
источник