JSON解析済みオブジェクトを印刷しますか?


200

オブジェクトJSON.parseを印刷してデバッグできるように、JSON解析されたJavaScriptオブジェクトを取得しました(関数に問題があります)。私が次のことをすると...

for (property in obj) {
    output += property + ': ' + obj[property]+'; ';
}
console.log(output);

複数の[object Object]がリストされます。内容を表示するためにこれをどのように印刷するのでしょうか。


5
補足として、for(objのプロパティ)は、継承されたものも含めて、すべてのプロパティを一覧表示します。そのため、Object.prototypeと任意の「母クラス」に関係のない無関係なものが1つたくさん得られます。これは、jsonオブジェクトでは不便です。このオブジェクトが所有するプロパティのみを取得するには、hasOwnProperty()でそれらをフィルタリングする必要があります。
BiAiB 2011

回答:


124

ほとんどのデバッガーコンソールは、オブジェクトの直接表示をサポートしています。使うだけ

console.log(obj);

デバッガーによっては、これにより、オブジェクトがコンソールに折りたたまれたツリーとして表示される可能性が高くなります。ツリーを開いてオブジェクトを検査できます。


122
クロム(およびおそらく他のブラウザー)では、このような文字列と組み合わせるとconsole.log("object: " + obj)、オブジェクトを表示せず、代わりに "object:[Object obj]"を出力することに言及する価値があります。
Shahar、2015年

24
@Shahar console.log("object: %O", obj)(Chrome)または console.log("object: %o", obj)(Firefox | Safari)を使用すると、オブジェクトの詳細にアクセスできます。以下の私の回答を参照してください。
デイブアンダーソン

1
@DaveAndersonは、コンソールでのオブジェクトの書式設定に適しています。
lekant 2016年

@Shaharありがとう、あなたが私に必要な情報でした。回答に追加する必要があります。
レオフラハティ2017

3
@DaveAndersonの方法に加えて、オブジェクトとは別の文字列にカンマを使用しても動作することができる:console.log("My object: ", obj)
シャハル

571

JSONの意味を知っていますか? JavaScriptオブジェクト表記。これは、オブジェクトにかなり適した形式になります。

JSON.stringify(obj) オブジェクトの文字列表現を返します。


12
私はこの答えが一番下にあることに驚いています......これは受け入れられる答えになるはずです:-)
Mingyu

1
文字列表現ではなく、コードエディタに表示されるオブジェクトが必要な場合はどうでしょうか。
SuperUberDuper

5
@SuperUberDuper:...次に、文字列表現を構築しようとはしません。:)
cHao

SuperUberDuperは、オブジェクトを文字列に変換せずにログに記録または表示できるかどうかを尋ねていたと思います。ブラウザでDOMに要素が必要な場合は、jsonを文字列化し、要素のコンテンツinnerHTMLをその文字列に設定して、ページに表示できます。
jasonleonhard 2017

たとえば、「./ data.json」からJsonをインポートします。var el = document.createElement( 'div'); el.innerHTML = JSON.stringify(Json);
jasonleonhard 2017

54

console.dir()代わりに試してくださいconsole.log()

console.dir(obj);

MDNによるconsole.dir()と:

  • FF8 +
  • IE9 +
  • オペラ
  • クロム
  • サファリ

1
IE9 +でのみ利用可能
jasonscript 2013年

3
console.dir()FF8 +、Opera、Chrome、Safariでも利用可能です:developer.mozilla.org/en-US/docs/Web/API/console.dir
olibre 2013年

すごい!これは私にとって最良の解決策です。ありがとう。
Hoang Le

1
ノードjsはどうですか?
Xsmael 2016

良いですが、log( "string" + variable)のような文字列連結はサポートされていません
Nassim

47

インデント付きのきれいな複数行のJSONが必要な場合JSON.stringifyは、3番目の引数を使用できます。

JSON.stringify(value[, replacer[, space]])

例えば:

var obj = {a:1,b:2,c:{d:3, e:4}};

JSON.stringify(obj, null, "    ");

または

JSON.stringify(obj, null, 4);

次の結果が得られます:

"{
    "a": 1,
    "b": 2,
    "c": {
        "d": 3,
        "e": 4
    }
}"

ブラウザーでconsole.log(obj)はさらに優れた機能を発揮しますが、シェルコンソール(node.js)では機能しません。



25

文字列形式を使用します。

console.log("%s %O", "My Object", obj);

Chromeには次の形式指定子があります。

  • %s 値を文字列としてフォーマットします。
  • %dまたは%i値を整数としてフォーマットします。
  • %f 値を浮動小数点値としてフォーマットします。
  • %o 値を展開可能なDOM要素としてフォーマットします([要素]パネルなど)。
  • %O 値を拡張可能なJavaScriptオブジェクトとしてフォーマットします。
  • %c 指定したCSSスタイルに従って出力文字列をフォーマットします。

Firefoxには、同様のオプションを持つ文字列サブスティションもあります。

  • %oJavaScriptオブジェクトへのハイパーリンクを出力します。リンクをクリックすると、インスペクターが開きます。
  • %d または %i整数を出力します。フォーマットはまだサポートされていません。
  • %s 文字列を出力します。
  • %f浮動小数点値を出力します。フォーマットはまだサポートされていません。

Safariにはprintfスタイルのフォーマッターがあります

  • %d または %i整数
  • %[0.N]f N桁の精度の浮動小数点値
  • %o オブジェクト
  • %s ストリング

1
良い参照回答
David

1
%Oは本当に役に立ちます
エバートン

4

素敵でシンプル:

console.log("object: %O", obj)

1
%Oの目的を教えてください。具体的にはOである必要がありますか?-ソリューションは魅力のように機能します
アントニウス

Oはオブジェクトを表します。オブジェクトが文字列として印刷できる限り、問題なく印刷する必要があります。これは、エラーの場所がわからない多くの場合のトラブルシューティングに役立ちました
mbenhalima

ここで通知するのを忘れていました。実際、%Oを使用する必要はありません。console.log( "object:"、obj)を直接使用できます。ありがとう@mbenhalima
アントニウス

3

使うだけ

console.info("CONSOLE LOG : ")
console.log(response);
console.info("CONSOLE DIR : ")
console.dir(response);

そして、あなたはこれをクロムコンソールで得るでしょう:

CONSOLE LOG : 
facebookSDK_JS.html:56 Object {name: "Diego Matos", id: "10155988777540434"}
facebookSDK_JS.html:57 CONSOLE DIR : 
facebookSDK_JS.html:58 Objectid: "10155988777540434"name: "Diego Matos"__proto__: Object

2

オブジェクトまたは配列の内容を警告するシンプルな関数。
配列、文字列、または内容を警告するオブジェクトを使用して、この関数を呼び出します。

関数

function print_r(printthis, returnoutput) {
    var output = '';

    if($.isArray(printthis) || typeof(printthis) == 'object') {
        for(var i in printthis) {
            output += i + ' : ' + print_r(printthis[i], true) + '\n';
        }
    }else {
        output += printthis;
    }
    if(returnoutput && returnoutput == true) {
        return output;
    }else {
        alert(output);
    }
}

使用法

var data = [1, 2, 3, 4];
print_r(data);

2

次のコードは、警告ボックスに完全なJSONデータを表示します

var data= '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';

json = JSON.parse(data);
window.alert(JSON.stringify(json));

2

デバッグしたい場合は、なぜコンソールデバッグを使用しないのか

window.console.debug(jsonObject);

0

サーバー上のjsで作業している場合、もう少し体操は大いに役立ちます...これが私のppos(pretty-print-on-server)です。

ppos = (object, space = 2) => JSON.stringify(object, null, space).split('\n').forEach(s => console.log(s));

これは、サーバーコードを記述しているときに実際に読み取ることができるものを作成するという、強力な作業を行います。


0

どのようにして公式に作成されなかったかはわかりませんが、文字列化されたログを簡単に出力できるように、独自のjsonメソッドconsoleオブジェクトに追加しました

JavaScriptでのオブジェクト(非プリミティブ)を観察することであるあなたがmechanics..what量子ビットのような「測定」、すでに変更されている実際の状態、ではないかもしれません。

console.json = console.json || function(argument){
    for(var arg=0; arg < arguments.length; ++arg)
        console.log(  JSON.stringify(arguments[arg], null, 4)  )
}

// use example
console.json(   [1,'a', null, {a:1}], {a:[1,2]}    )

オブジェクトの文字列化されたバージョンを表示するには、多くの場合、オブジェクトをそのまま印刷すると(生のオブジェクト)、プログラムの進行に伴って変化する「ライブ」バージョンのオブジェクトが印刷され、オブジェクトの状態が反映されないためです。ログに記録された時点、たとえば:

var foo = {a:1, b:[1,2,3]}

// lets peek under the hood
console.log(foo) 

// program keeps doing things which affect the observed object
foo.a = 2
foo.b = null
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.