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

时间:2018-03-21 12:16:09

标签: javascript json ecmascript-6 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

3 个答案:

答案 0 :(得分:2)

使用模板文字时,结果是字符串。如果要在记录数据之前/之后添加文本标签或其他值,请用逗号分隔它们:

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

答案 1 :(得分:0)

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

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

现在这将按预期工作:

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

答案 2 :(得分:0)

TestDatabase.class实现是特定于浏览器的。在现代浏览器中,对象可以以人类可读的形式输出。

现代实现支持多个console参数(如另一个答案所示):

console

在旧版浏览器中,这可能无法正常工作;多个console.log(`JSON Data`, json); 参数最初用于string substitutions,如果第一个参数意外包含替换语法,则可能存在问题,例如console.log

实现字符串,人类可读输出的兼容的跨平台方法是配置对象字符串化:

%s

这种方法的好处是输出在任何地方保持不变,无论是遗留浏览器还是记录器拦截的console.log(`JSON Data\n\n${JSON.stringify(json, null, 2)}`) 呼叫。