目标:使用Node js以json格式写入文件内容。手动打开文件后,内容应以json格式显示
我尝试了两个fs-extra
模块功能-outputJsonSync
或writeFileSync
来将json内容写入文件。他们将内容内联如下所示
{"a":"1", "b":"2"}
但是,当我手动打开文件时,我希望看到以下内容:
{
"a" : "1",
"b" : "2"
}
我对数据尝试了jsome和pretty-data,如下所示:
fs.outputJsonSync(jsome(data))
fs.outputJsonSync(pd.json(data))
他们还仅在向数据内联写入数据的情况下,向数据中添加了额外的\
或\n
和tabs
,但未以格式化的样式打开。
任何输入均受到高度赞赏。谢谢!
[更新]
其他情况:
const obj = {"a":"1", "b":"2"}
var string = "abc" + "splitIt" + obj
doSomething(string)
在函数实现内部:
doSomething(string){
var arr = string.split("splitIt")
var stringToWrite = JSON.stringify(arr[1], null, ' ').replace(/: "(?:[^"]+|\\")*"$/, ' $&')
fs.writeFileSync(filePath, stringToWrite)
}
打开文件时显示以下输出:
"[object Object]"
答案 0 :(得分:1)
有了对象后,您可以指定一个替换函数以换行符分隔每个键值对,然后使用正则表达式修剪前导空格,然后使用另一个正则表达式在{{之前插入一个空格1}}的键值对。然后,只需将格式化的字符串写入文件:
:
不过,您可能会发现前导空格更具可读性:
const obj = {"a":"1", "b":"2"};
const stringToWrite = JSON.stringify(obj, null, ' ')
// Trim leading spaces:
.replace(/^ +/gm, '')
// Add a space after every key, before the `:`:
.replace(/: "(?:[^"]+|\\")*",?$/gm, ' $&');
console.log(stringToWrite);
答案 1 :(得分:1)
JSON.stringify,有两个可选参数,第一个是替换函数,第二个(您想要的)用于间距。
const obj = {"a":"1", "b":"2"}
console.log(JSON.stringify(obj, null, 2))
这将为您提供:
{
"a": "1",
"b": "2"
}