打印 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() 支持:

FF8+ IE9+ 歌剧 铬 野生动物园

【讨论】:

仅在 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 解析的对象?的主要内容,如果未能解决你的问题,请参考以下文章

我如何解析 Json 对象或数组?我的代码哪里出错了?

如何在swift 3中解析Json对象

Python 解析 JSON 数组

如何解析 JSON 中的所有数据?

使用 Alamofire 和 SwiftyJSON 正确解析具有多个对象的 JSON 数组

Json解析Swift没有得到打印