打印 JSON 解析的对象?
Posted
技术标签:
【中文标题】打印 JSON 解析的对象?【英文标题】:Print JSON parsed object? 【发布时间】:2011-06-23 10:10:15 【问题描述】:我有一个已使用 JSON.parse
解析为 JSON 的 javascript 对象我现在想打印该对象以便调试它(该函数出现问题)。当我执行以下操作时...
for (property in obj)
output += property + ': ' + obj[property]+'; ';
console.log(output);
我列出了多个 [object Object]。我想知道如何打印它以查看内容?
【问题讨论】:
作为旁注, for (property in obj) 将列出所有属性,甚至包括继承的属性。因此,对于 Object.prototype 和任何“母类”,您会得到很多无关紧要的东西。这对 json 对象很不方便。您必须使用 hasOwnProperty() 过滤它们以仅获取此对象拥有的属性。 【参考方案1】:你知道 JSON 代表什么吗? JavaScript 对象表示法。它为对象提供了很好的格式。
JSON.stringify(obj)
将返回对象的字符串表示形式。
【讨论】:
我很惊讶这个答案在底部......这应该是公认的答案:-) 如果您不想要字符串表示,而是想要在代码编辑器中显示的对象怎么办? @SuperUberDuper: ...那么你现在就不会尝试构建字符串表示了,对吧。 :) 我相信 SuperUberDuper 是在询问是否可以在不将其转换为字符串的情况下记录或查看对象。如果在浏览器中查看 DOM 需要一个元素,您可以将 json 字符串化,并将元素内容 innerhtml 设置为该字符串以在页面上查看它。 例如:import Json from './data.json'; var el = document.createElement('div'); el.innerHTML = JSON.stringify(Json);【参考方案2】:大多数调试器控制台都支持直接显示对象。只需使用
console.log(obj);
根据您的调试器,这很可能会将控制台中的对象显示为折叠树。您可以打开树并检查对象。
【讨论】:
值得一提的是,在 chrome(可能还有其他浏览器)中,当与这样的字符串组合时:console.log("object: " + obj)
它不会显示对象,而是会输出“object: [Object obj]” .
@Shahar console.log("object: %O", obj)
(Chrome) 或 console.log("object: %o", obj)
(Firefox|Safari) 将让您访问对象详细信息,请参阅下面的答案。
@DaveAnderson 对控制台中的对象格式进行了很好的拍摄。
@Shahar 谢谢,你的就是我需要的信息。应该添加到答案中。
除了@DaveAnderson 的方法,使用逗号将字符串与对象分开也可以:console.log("My object: ", obj)
【参考方案3】:
如果您想要一个带有缩进的漂亮的多行 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) 中则不然。
【讨论】:
【参考方案4】:尝试console.dir()
而不是console.log()
console.dir(obj);
MDN 表示console.dir()
支持:
【讨论】:
仅在 IE9+ 中可用console.dir()
也可用于 FF8+、Opera、Chrome 和 Safari:developer.mozilla.org/en-US/docs/Web/API/console.dir
太棒了!这对我来说是最好的解决方案。谢谢。
node js 呢?
不错,但不支持像log("string" + variable)这样的字符串拼接【参考方案5】:
要打印 JSON 解析的对象,只需键入 console.log( JSON.stringify(data, null, " ") );
你会得到非常清晰的输出
【讨论】:
【参考方案6】:使用字符串格式;
console.log("%s %O", "My Object", obj);
Chrome 有 Format Specifiers 和以下内容;
%s
将值格式化为字符串。
%d
或 %i
将值格式化为
一个整数。
%f
将值格式化为浮点值。
%o
将值格式化为可扩展的 DOM 元素(如
元素面板)。
%O
将值格式化为可扩展的 JavaScript
目的。
%c
根据你的 CSS 样式格式化输出字符串
提供。
Firefox 也有 String Substitions 有类似的选项。
%o
输出到 JavaScript 对象的超链接。点击链接会打开一个检查器。
%d
或 %i
输出一个整数。尚不支持格式化。
%s
输出一个字符串。
%f
输出一个浮点值。尚不支持格式化。
Safari 有printf style formatters
%d
或 %i
整数
%[0.N]f
精度为 N 位的浮点值
%o
对象
%s
字符串
【讨论】:
不错的参考答案 %O 真的很有帮助 仅供参考,在 Firefox 中,%O 现在似乎输出为控制台内的可扩展对象。【参考方案7】:又好又简单:
console.log("object: %O", obj)
【讨论】:
您能描述一下 %O 的用途吗?具体应该是O吗? - 你的解决方案就像一个魅力 O 代表对象,所以只要对象可以作为字符串打印,它应该可以毫无问题地打印。这有助于我在许多不确定错误出在哪里的情况下进行故障排除 这里忘记告知了,其实我们不需要使用%O。我们可以直接使用 console.log("object: ", obj) 谢谢@mbenhalima 那么这与接受的答案相同。【参考方案8】:随便用
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
【讨论】:
【参考方案9】:如果你想调试为什么不使用控制台调试
window.console.debug(jsonObject);
【讨论】:
【参考方案10】:警告对象或数组内容的简单函数。 使用数组或字符串或对象调用此函数,它会提醒内容。
功能
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);
【讨论】:
【参考方案11】:以下代码将在警告框中显示完整的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));
【讨论】:
【参考方案12】:如果您在服务器上使用 js 工作,那么只需多做一点体操就会有很长的路要走……这是我的 ppos(pretty-print-on-server):
ppos = (object, space = 2) => JSON.stringify(object, null, space).split('\n').forEach(s => console.log(s));
当我编写服务器代码时,它在创建我可以实际阅读的内容方面做得非常出色。
【讨论】:
【参考方案13】:我不知道它是如何从未正式制作的,but I've added my own json
method 到 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
【讨论】:
以上是关于打印 JSON 解析的对象?的主要内容,如果未能解决你的问题,请参考以下文章