我只是尝试使用一些ANSI样式代码来记录JSON,在Node.js中,这是代码,有几个例子:
let s = chalk.green('Hello World')
let o = {s} // or {s: s}
console.log(s)
console.log(o)
console.log(o.s)
console.log(JSON.stringify(o))
(注意:chalk
就像colors
)
但是在记录对象或对其进行字符串化时,格式化会被转义。有没有办法阻止它?
结果:
所以就像记录\u001b[32mHello World\u001b[39m
和\\u001b[32mHello World\\u001b[39m
(加倍\
)
答案 0 :(得分:0)
我发现了一种(有点脏)修复:
JSON.stringify(o)
.replace(/\\/g, '')
.replace(/u001b/g, '\u001b')
因此,如果字符串包含\u001b
,则stringify
将转义它:\\u001b
。通过替换/\\/g
,它实际上只与\
匹配,但它似乎也是stringify
添加的那个。
第二个replace
将重新添加,只有一个{uneaped \
。这是我到目前为止所做的最好的。
答案 1 :(得分:0)
要从对象中的每个字符串值中去除ansi转义码,请尝试以下操作:
const stripAnsi = require("strip-ansi")
const mapObj = require("map-obj")
const stripAnsiObj = (object) => mapObj(object, (key, value) => [key, stripAnsi(value)])
用法示例:
const chalk = require("chalk")
const object = {a: chalk.green("Hello World")}
JSON.stringify(object)
//=> {a: "\u001b[32mHello World\u001b[39m"}
JSON.stringify(stripAnsiObj(object))
//=> {a: "Hello World"}