JSON.stringify() 转义值的行结束字符
JSON.stringify() escapes line ending character for values
例如我有以下代码:
var obj = {
name: "alex",
lastname: "aaa",
portfolio: {
stocks: "TSLA, BA"
},
comments: "some\nrandom\ndescription"
};
console.log("JSON OUT:\n" + obj.comments);
console.log("STRING OUT:\n" + JSON.stringify(obj, null, 2));
这导致:
JSON OUT:
some
random
description
STRING OUT:
{
"name": "alex",
"lastname": "aaa",
"portfolio": {
"stocks": "TSLA, BA"
},
"comments": "some\nrandom\ndescription"
}
如您所见,它在注释值中转义了 '\n' 个字符。换句话说,它将结果字符串中的“\n”替换为“\\n”。
有没有可能我可以避免这种行为?
我尝试在 stringify() 第二个参数中使用替换函数,它做了类似的事情 return v.replace(/\n/g, "\n");
但它更新了工作(可能是因为原始字符串只包含 \n 并且最终字符串在替换函数完成后被搞砸了)。
还有另一个解决方案在最终字符串上涉及 .replace(/\n/g, "\n")
,但它搞砸了 stringify() 函数添加的所有空格:
{
"name": "alex",
"lastname": "aaa",
"portfolio": {
"stocks": "TSLA, BA"
},
"comments": "some
random
description"
}
但我希望在 JSON.stringify() 调用后输出格式正确的人类可读字符串,我不需要稍后将其转换回 JSON:
{
"name": "alex",
"lastname": "aaa",
"portfolio": {
"stocks": "TSLA, BA"
},
"comments": "some
random
description"
}
您可以改进您的替换逻辑,并捕获原始缩进。然后在替换个人 \n
:
时重新插入该缩进
var obj = {
name: "alex",
lastname: "aaa",
portfolio: {
stocks: "TSLA, BA"
},
comments: "some\nrandom\ndescription"
};
let result = JSON.stringify(obj, null, 2).replace(/^(\s*).*\n.*$/gm, (line, indent) =>
line.replace(/\n/g, "\n" + indent)
);
console.log(result);
例如我有以下代码:
var obj = {
name: "alex",
lastname: "aaa",
portfolio: {
stocks: "TSLA, BA"
},
comments: "some\nrandom\ndescription"
};
console.log("JSON OUT:\n" + obj.comments);
console.log("STRING OUT:\n" + JSON.stringify(obj, null, 2));
这导致:
JSON OUT:
some
random
description
STRING OUT:
{
"name": "alex",
"lastname": "aaa",
"portfolio": {
"stocks": "TSLA, BA"
},
"comments": "some\nrandom\ndescription"
}
如您所见,它在注释值中转义了 '\n' 个字符。换句话说,它将结果字符串中的“\n”替换为“\\n”。
有没有可能我可以避免这种行为?
我尝试在 stringify() 第二个参数中使用替换函数,它做了类似的事情 return v.replace(/\n/g, "\n");
但它更新了工作(可能是因为原始字符串只包含 \n 并且最终字符串在替换函数完成后被搞砸了)。
还有另一个解决方案在最终字符串上涉及 .replace(/\n/g, "\n")
,但它搞砸了 stringify() 函数添加的所有空格:
{
"name": "alex",
"lastname": "aaa",
"portfolio": {
"stocks": "TSLA, BA"
},
"comments": "some
random
description"
}
但我希望在 JSON.stringify() 调用后输出格式正确的人类可读字符串,我不需要稍后将其转换回 JSON:
{
"name": "alex",
"lastname": "aaa",
"portfolio": {
"stocks": "TSLA, BA"
},
"comments": "some
random
description"
}
您可以改进您的替换逻辑,并捕获原始缩进。然后在替换个人 \n
:
var obj = {
name: "alex",
lastname: "aaa",
portfolio: {
stocks: "TSLA, BA"
},
comments: "some\nrandom\ndescription"
};
let result = JSON.stringify(obj, null, 2).replace(/^(\s*).*\n.*$/gm, (line, indent) =>
line.replace(/\n/g, "\n" + indent)
);
console.log(result);