打印JSON解析对象?

我有一个javascript对象,它已经被JSON解析使用JSON.parse,我现在想打印对象,以便我可以调试它(函数出了问题)。当我做以下事情时……

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

我得到了多个[object object]。我想知道我要如何打印这个才能查看内容?

539816 次浏览

大多数调试器控制台支持直接显示对象。只使用

console.log(obj);

根据调试器的不同,这很可能会在控制台中以折叠树的形式显示对象。您可以打开树并检查对象。

尝试console.dir()而不是console.log()

console.dir(obj);

中数表示支持console.dir():

  • FF8 +
  • IE9 +
  • 歌剧
  • Safari

你知道JSON代表什么吗?JavaScript对象表示法。它为对象提供了很好的格式。

JSON.stringify(obj)将返回对象的字符串表示形式。

提醒对象或数组内容的简单函数 使用数组或字符串或对象调用此函数,它会提醒内容

函数

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);

下面的代码将在警报框中显示完整的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));

只使用

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

你会在chrome控制台得到这个:

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

使用字符串格式;

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

Chrome有以下格式说明符;

  • %s将值格式化为字符串。
  • %d or %i将值格式化为 一个整数。李< / >
  • %f将值格式化为浮点值。
  • %o将值格式化为可展开的DOM元素(如 元素面板)。李< / >
  • %O将值格式化为可扩展的JavaScript 对象。李< / >
  • %c根据您的CSS样式格式化输出字符串 李。< / >

Firefox也有字符串Substitions,有类似的选项。

  • %o输出一个指向JavaScript对象的超链接。单击该链接将打开一个检查器。
  • %d%i输出一个整数。尚不支持格式化。
  • %s输出一个字符串。
  • %f输出一个浮点值。尚不支持格式化。

Safari有Printf样式格式化器

  • %d%i整数
  • %[0.N]f精度为N位的浮点值
  • %o对象
  • %s字符串

如果你想要一个漂亮的带缩进的多行JSON,那么你可以使用JSON.stringify及其第三个参数:

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)做得更好,但在shell控制台(node.js)中则不然。

如果你想调试,为什么不使用控制台调试

window.console.debug(jsonObject);

打印JSON解析对象只需键入

console.log( JSON.stringify(data, null, " ") );

输出会非常清晰

很简单:

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

如果你在服务器上用js工作,只要多做一点练习就可以了。这是我的ppos (pretty-print-on-server):

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

当我在写服务器代码时,它创造了一些我可以真正阅读的东西。

我不知道为什么它从来没有被正式定义为但我已经添加了自己的json方法console对象,以便更容易地打印字符串化日志:

在javascript中观察对象(非原语)有点像量子力学,你“测量”可能不是真实的状态,它已经改变了。

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