1222

を使用してデバッグする場合console.log()、完全なオブジェクトを取得するにはどうすればよいですか?

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};    
console.log(myObject);

出力:

{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }

でも物件の内容も見たいですf

4

17 に答える 17

1896

あなたは使用する必要がありますutil.inspect()

const util = require('util')

console.log(util.inspect(myObject, {showHidden: false, depth: null, colors: true}))

// alternative shortcut
console.log(util.inspect(myObject, false, null, true /* enable colors */))

出力

{ a: 'a',  b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }

util.inspect()ドキュメントを参照してください。

于 2012-05-23T23:30:34.900 に答える
800

を使用JSON.stringifyして、構文を覚えやすくするだけでなく、いくつかの優れたインデントを取得できます。

console.log(JSON.stringify(myObject, null, 4));

{
    "a": "a",
    "b": {
        "c": "c",
        "d": {
            "e": "e",
            "f": {
                "g": "g",
                "h": {
                    "i": "i"
                }
            }
        }
    }
}

3番目の引数はインデントレベルを設定するため、必要に応じて調整できます。

必要に応じて、ここで詳細を確認してください。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

于 2012-05-23T23:42:54.207 に答える
554

(少なくとも)Node.js v0.10.33(安定)/ v0.11.14(不安定)からおそらく(少なくとも)v7.7.4(この回答の最新の更新時点での最新バージョン)までの多くの有用な回答の編集。RoryO'Kaneの助けを借りて帽子をかぶった。

tl; dr

質問の例に必要な出力を取得するには、次を使用しますconsole.dir()

console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion

どうしてutil.inspect()?これはすでに診断出力の中心にあるためです。console.log()またconsole.dir()、Node.jsREPLutil.inspect() 暗黙的にを使用します。通常、直接電話する必要はありません。require('util')util.inspect()

詳細は以下をご覧ください。


  • console.log()(およびそのエイリアス、console.info()):

    • 最初の引数がフォーマット文字列でない場合util.inspect()すべての引数に自動的に適用されます:
      • o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
      • この場合、オプションを渡すことはできないことに注意してくださいutil.inspect()。これは、2つの注目すべき制限を意味し ます。
        • 出力の構造的な深さは2レベルに制限されています(デフォルト)。
          • これはで変更できないためconsole.log()、代わりに次を使用する必要がありますconsole.dir()無制限の深さのconsole.dir(myObject, { depth: null }プリント; 下記参照。
        • 構文の色付けをオンにすることはできません。
    • 最初の引数がフォーマット文字列の場合(以下を参照):util.format()フォーマット文字列に基づいて残りの引数を出力するために使用します(以下を参照)。例えば:
      • o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
      • ノート:
        • オブジェクト util.inspect()スタイルを表すためのプレースホルダーはありません。
        • で生成されたJSON%jはきれいに印刷されません。
  • console.dir()

    • 検査する引数を1つだけ受け入れ、常に適用します。基本的に、デフォルトではオプションなしutil.inspect()のラッパーです。util.inspect()例えば:
      • o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
    • Node.js v0.11.14 +:オプションの2番目の引数は、次のオプションをutil.inspect()指定します–以下を参照してください。例えば:
      • console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
  • REPL 構文の色付けを使用して式の戻り値を暗黙的に出力util.inspect() します;
    つまり、変数の名前を入力してEnterキーを押すだけで、その値の検査済みバージョンが出力されます。例えば:
    • o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.

util.inspect()オブジェクト配列の表現を自動的にきれいに印刷しますが、必要な場合にのみ複数行の出力を生成します。

  • きれいに印刷される動作はcompact、オプションのoptions引数のプロパティによって制御できます。無条件false複数行の出力を使用しますが、きれいな印刷を完全に無効にします。条件付きの複数行の動作を制御するために、数値(デフォルトは)に設定することもできます。ドキュメントを参照してください。true3

  • デフォルトでは、出力が ファイルに送信されるか端末に送信されるかに関係なく、 Shreyのおかげで出力は約60文字でラップされます。実際には、改行はプロパティの境界でのみ発生するため、多くの場合、行が短くなりますが、長くなることもあります(たとえば、プロパティ値が長い場合)。

  • v6.3.0以降では、このbreakLengthオプションを使用して60文字の制限を上書きできます。に設定するとInfinity、すべてが1行に出力されます。

きれいな印刷をより細かく制御したい場合はJSON.stringify()、3番目の引数を使用することを検討してください。ただし、次の点に注意してください。

  • グローバルコンテキストなど、循環参照を持つオブジェクトでは失敗します。module
  • メソッド(関数)は設計上含まれていません。
  • 非表示の(列挙できない)プロパティの表示を選択することはできません。
  • 呼び出し例:
    • JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces

util.inspect()オプションオブジェクト(2番目の引数):

フォーマットされた文字列の特定の側面を変更するオプションのオプションオブジェクトを渡すことができます。サポートされているプロパティの一部は次のとおりです。

現在の完全なリストについては、最新のNode.jsドキュメントを参照してください。

  • showHidden

    • の場合、オブジェクトの列挙不可能なプロパティ[またはtrueを使用したときに表示されないように指定されたプロパティ]も表示されます。デフォルトは。for keys in objObject.keys(obj)false
  • depth

    • オブジェクトのフォーマット中に再帰する回数を検査するように指示します。これは、大きく複雑なオブジェクトを検査する場合に役立ちます。デフォルトは2です。無期限に繰り返すには、を渡しnullます。
  • colors

    • trueの場合、出力はANSIカラーコードでスタイル設定されます。デフォルトはfalse。色はカスタマイズ可能です[…–リンクを参照]。
  • customInspect

    • の場合false、検査対象のオブジェクトに定義されているカスタムinspect()関数は呼び出されません。デフォルトはtrue

util.format()format-stringプレースホルダー(最初の引数)

サポートされているプレースホルダーの一部は次のとおりです。

現在の完全なリストについては、最新のNode.jsドキュメントを参照してください。

  • %s- 弦。
  • %d–数値(整数と浮動小数点の両方)。
  • %j–JSON。
  • %%–単一パーセント記号('%')。これは引数を消費しません。
于 2014-12-17T20:57:35.160 に答える
66

もう1つの簡単な方法は、jsonに変換することです

console.log('connection : %j', myObject);
于 2014-01-15T16:05:42.843 に答える
49

これを試して:

console.dir(myObject,{depth:null})
于 2015-10-19T11:05:35.227 に答える
49

Node.js 6.4.0以降、これは次の方法でエレガントに解決できますutil.inspect.defaultOptions

require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
于 2017-01-26T20:32:12.350 に答える
29

おそらくconsole.dirあなたが必要とするのはそれだけです。

http://nodejs.org/api/console.html#console_console_dir_obj

objでutil.inspectを使用し、結果の文字列をstdoutに出力します。

より詳細な制御が必要な場合は、utilオプションを使用してください。

于 2014-03-02T01:27:02.810 に答える
25

これらの使用法の両方を適用できます。

// more compact, and colour can be applied (better for process managers logging)
console.dir(queryArgs, { depth: null, colors: true });

// get a clear list of actual values
console.log(JSON.stringify(queryArgs, undefined, 2));
于 2018-01-11T12:55:25.290 に答える
23

オブジェクトを検査する良い方法は、ノード用のChromeDevToolsでnode--inspectオプションを使用することです。

node.exe --inspect www.js

Chromeで開き、[ノード専用のDevToolsを開く]chrome://inspect/#devicesをクリックします

これで、ログに記録されたすべてのオブジェクトが、chromeで実行されている通常のJSのようにインスペクターで使用できるようになります。

ここに画像の説明を入力してください

インスペクターを再度開く必要はありません。ノードが起動または再起動するとすぐにノードに自動的に接続します。--inspectChromeDevToolsfor Nodeの両方が、古いバージョンのNodeとChromeでは使用できない場合があります。

于 2017-04-17T11:37:29.963 に答える
20

あなたもすることができます

console.log(JSON.stringify(myObject, null, 3));
于 2016-02-14T10:32:20.687 に答える
13

これはあなたにとって役立つと思います。

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};

console.log(JSON.stringify(myObject, null, '\t'));

この答えで述べたように:

JSON.stringifyの3番目のパラメータは、きれいに印刷するための空白の挿入を定義します。文字列または数値(スペースの数)にすることができます。

于 2019-06-14T04:28:50.213 に答える
5

メッセージinspect()内のオブジェクトの表現をオーバーライドするメソッドをオブジェクトに追加するだけです。console.log

例えば:

var myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }

次に、オブジェクトはconsole.logとノードシェルの両方で必要に応じて表されます


アップデート:

object.inspectは非推奨になりました(https://github.com/nodejs/node/issues/15549)。代わりにmyObject[util.inspect.custom]を使用してください。

const util = require('util')

var myObject = {
  /* nested properties not shown */
}

myObject[util.inspect.custom] = function(){ return JSON.stringify( this, null, 4 ); }


console.log(util.inspect(myObject))
于 2015-09-30T12:47:46.510 に答える
5

JSON.stringify()

let myVar = {a: {b: {c: 1}}};
console.log(JSON.stringify( myVar, null, 4 ))

データオブジェクトの詳細な検査に最適です。このアプローチは、ネストされた配列および配列を持つネストされたオブジェクトで機能します。

于 2020-02-19T23:56:11.133 に答える
3

簡単なトリックは、スクリプトの実行時にdebugモジュールを使用しDEBUG_DEPTH=nullて環境変数として追加することです

元。

DEBUG = * DEBUG_DEPTH=nullノードindex.js

あなたのコードで

const debug = require('debug');
debug("%O", myObject);
于 2017-07-27T11:35:47.223 に答える
2

ノードREPLには、オブジェクトの表示方法をオーバーライドするための組み込みソリューションがあります。ここを参照してください。

REPLモジュールはutil.inspect()、値を出力するときに内部的にを使用します。ただし、オブジェクトの 関数がある場合は、その関数util.inspectへの呼び出しを委任します。inspect()

于 2016-02-11T17:02:16.567 に答える
2

最も簡単なオプション:

    console.log('%O', myObject);

于 2019-09-18T13:50:40.390 に答える
1

配列内の非表示のアイテムを表示する方法を探している場合は、合格する必要がありますmaxArrayLength: Infinity

console.log(util.inspect(value, { maxArrayLength: Infinity }));
于 2020-08-16T11:38:47.640 に答える