例如我有以下代碼:
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() 2nd 引數中使用替換函式,它執行類似的操作,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"
}
uj5u.com熱心網友回復:
您可以改進替換邏輯,并捕獲原始縮進。然后在替換個人時重新插入該縮進\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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403091.html
標籤:
