2011-09-15 56 views
134

是否可以打印對象內容Node.js中的方法和屬性?如何在Node.js中記錄JSON對象的內容?

此刻我想打印的會話對象,並得到如下:

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

也許以類似的方式來的print_r(陣列)在PHP中,或者在Java中使用的ToString。

+8

'的console.log( 「會議」 + util.inspect(會話))' – Raynos

+1

對於物體的更直觀和視覺輸出看看nodedump :https://github.com/ragamufin/nodedump – ragamufin

+0

謝謝Raynos! :) –

回答

226

試試這個:

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

如果對象可以轉換成JSON,將工作。

+2

謝謝,這是做的伎倆。 – Jack

+7

我正在嘗試爲請求對象執行此操作,但它顯示錯誤TypeError:將圓形結構轉換爲JSON 是否有任何方法來限制深度 – SoulMan

+0

無論如何要漂亮打印此? – chovy

31

要有一個更類似於原始的輸出console.log(obj)我通常使用console.log('Status: ' + util.inspect(obj))(JSON略有不同)。

+2

這給出了「util沒有定義」。你必須首先'var util = require(「util」)。而且,子對象仍然是[Object],而不是表示它們的JSON字符串。 – juanpaco

+11

要刪除深度限制,請使用:require('util')。inspect(obj,{depth:null})' – lapo

+0

正確。感謝您的更新。 – juanpaco

91
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 on MDN

+1

這對我很好用 – krodmannix

+0

這是一個非常實用的解決方案 –

6

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

+0

console.dir(someJsonObject);仍然留下嵌套的對象未打印,對我來說。 – nyarasha

+1

我認爲它不會通過它的原型鑽入對象,它不會處理某些遞歸。如果.dir()不夠用,你要麼必須做一些類似console.log(JSON.stringify())的東西或更特定於你的對象的東西。如果你有更多關於這個對象的信息,可能會給出更具體的建議。 – rainabba

+0

它可以採用與util.inspect相同的選項。添加{深度:空} –

17

這將與任何對象合作:

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

這適用於錯誤對象。他們的所有特性都沒有出現在其他解決方案中。 – Chris

+1

這只是對我而言。我認爲對象中的循環引用會崩潰 – Richard

+0

@Richard由於深度選項被設置爲null,它可能會掛起(編輯)。 Inspect具有循環參考的內置處理。 – cvsguimaraes