您如何在Node.js中记录JSON对象的内容?


170

是否可以在Node.js中打印对象内容,例如方法和属性?

目前,我正在尝试打印会话对象并获取以下内容:

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

也许以类似于PHP中的print_r(array)的方式,或者以Java中的.toString来使用。


9
console.log("Session:" + util.inspect(session))
雷诺斯2011年

1
要获得更直观,更直观的对象输出,请查看nodedump:github.com/ragamufin/nodedump
ragamufin 2013年

Answers:


271

试试这个:

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

如果对象可以转换为JSON,那将起作用。


9
我正在尝试为请求对象执行此操作,但是它显示错误TypeError:将圆形结构转换为JSON是否有任何方法来限制深度
Neil

反正漂亮打印吗?
chovy

5
@chovy:类似的方法可能起作用:console.log(JSON.stringify(json,null,4));
埃里克·布兰德尔2013年

1
这个工作对我来说:console.log("Session: %O", session); developer.mozilla.org/en-US/docs/Web/API/...
JP卢

为我的json API响应工作!谢谢
rodrigorf


33

为了使输出与console.log(obj)我通常使用的原始输出更相似console.log('Status: ' + util.inspect(obj))(JSON稍有不同)。


4
这给出了“未定义实用程序”。您必须先`var util = require(“ util”)。而且,子对象仍然显示为[Object],而不是表示它们的JSON字符串。
juanpaco

13
要删除深度限制,请使用:require('util').inspect(obj, {depth:null})
lapo

25

这将适用于任何对象:

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

2
这对于错误对象很有用。它们的属性均未显示在其他解决方案中。
克里斯(Chris

1
这只是挂在我身上。我认为对象中的循环引用会使它崩溃
理查德(Richard)

@Richard由于depth选项设置为,它可能为您挂起null。Inspect具有对循环引用的内置处理。
2grit

6

console.dir()是最直接的方法。


console.dir(someJsonObject); 对我来说,仍然留下嵌套的对象未打印。
nyarasha

1
我认为它不会通过其原型深入对象,也不会处理某些递归。如果.dir()不够用,您要么必须要做console.log(JSON.stringify())之类的事情,要么要做更特定于您对象的事情。如果您有关于该对象的更多信息,也许可以给出更具体的建议。
2015年

它可以采用与util.inspect相同的选项。添加{depth:null}
nikc.org


0

对于大多数对象,这将在nodejs控制台中输出

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.