ES6 - 如何使用模板文字保留 JSON 语法?

ES6 - How to keep JSON syntax with template literals?

当我这样做时:

console.log(JSON) 

它将在控制台中以JSON语法显示:

[ { test1: 'data',
    test2: 'data',
    test3: 'data' } ]

当我这样做时:

console.log(`JSON Data\n\n${JSON}`)

它将显示 [object Object] 所以我这样做:

console.log(`JSON Data\n\n${JSON.stringify(JSON)}`)

以字符串语法显示:

[{"test1":"data","test2":"data","test3":"data"}]

我想对 JSON 数据执行 console.log,后跟模板文字中的一些文本,同时保持 JSON 语法,如下所示:

[ { test1: 'data',
test2: 'data',
test3: 'data' } ]

JSON Data Displayed Above

当您使用模板文字时,结果是一个字符串。如果要添加文本标签 before/after 记录的数据或其他值,请用逗号分隔它们:

var data = { a: 1, b: [1, 2] };
console.log('Before:', data, '\n\nJSON Data Displayed Above');

console.log(data, '\n\nAfter');

console.log('Before\n', data, '\n\nAfter');

或者,您可以更改对象转换为字符串的方式:

 Object.prototype.toString = function(){
   return JSON.stringify(this);
 };

现在这将按预期工作:

 console.log(`JSON Data\n\n${JSON}`)

console 实现是 browser-specific。在现代浏览器中,对象可以以 human-readable 形式输出。

现代实现支持多个 console 参数(正如另一个答案所建议的):

console.log(`JSON Data`, json);

这在旧版浏览器中可能无法正常工作;多个 console.log 参数最初用于 string substitutions,如果第一个参数不小心包含替换语法,则可能会出现问题,例如%s.

一种兼容的,cross-platform实现string-only,human-readable输出的方式是配置对象字符串化:

console.log(`JSON Data\n\n${JSON.stringify(json, null, 2)}`)

这种方法的好处是输出在任何地方都保持不变,无论是旧版浏览器还是被记录器拦截的 console.log 调用。