【发布时间】:2018-05-03 12:33:15
【问题描述】:
我想为某些特定的子对象缩进所有对象除了。
这是我最接近解决问题的方法。在示例中,我想避免缩进color:
let obj = {
colorsPerValue: [
{ value: 0.0, color: { r: 240, g: 59, b: 32 } },
{ value: 0.5, color: { r: 255, g: 255, b: 255 } },
{ value: 1.0, color: { r: 44, g: 162, b: 95 } }
]
};
let str = JSON.stringify(obj, replacer, 2);
console.log(str);
replacer(name, val) {
if (name === 'color') {
return JSON.stringify(val); // stringify with no indentation
} else {
return val; // return as is
}
};
想要的结果:
{
colorsPerValue: [
{
value: 0.0,
color: { r: 240, g: 59, b: 32 }
},
{
value: 0.5,
color: { r: 255, g: 255, b: 255 }
},
{
value: 1.0,
color: { r: 44, g: 162, b: 95 }
}
]
}
实际结果(你猜对了,return JSON.stringify(val); 返回一个序列化的string,这不是我想要的):
{
"colorsPerValue": [
{
"value": 0,
"color": "{\"r\":240,\"g\":59,\"b\":32}"
},
{
"value": 0.5,
"color": "{\"r\":255,\"g\":255,\"b\":255}"
},
{
"value": 1,
"color": "{\"r\":44,\"g\":162,\"b\":95}"
}
]
}
let obj = {
colorsPerValue: [
{ value: 0.0, color: { r: 240, g: 59, b: 32 } },
{ value: 0.5, color: { r: 255, g: 255, b: 255 } },
{ value: 1.0, color: { r: 44, g: 162, b: 95 } }
]
};
let str = JSON.stringify(obj, replacer, 2);
console.log(str);
function replacer(name, val) {
if (name === 'color') {
return JSON.stringify(val); // stringify with no indentation
} else {
return val; // return as is
}
};
【问题讨论】:
-
你想“漂亮地打印”你的 json,还是你想做什么?
-
@MichaelHirschler 是的,就是这样。一些“较低的对象”对读者来说“不那么有趣”,我需要让它们不缩进,否则它们会“混淆”它周围的其他有趣信息。
标签: javascript json indentation