node.js - 将json格式的json内容写入Node js中的新文件
问题描述
目标:使用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]"
解决方案
一旦你有了对象,你可以指定一个替换函数来用换行符分隔每个键值对,然后使用正则表达式修剪前导空格,然后使用另一个正则表达式在:
键值之前插入一个空格一对。然后,只需将格式化的字符串写入文件:
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);
不过,您可能会发现前导空格更具可读性:
const obj = {"a":"1", "b":"2"};
const stringToWrite = JSON.stringify(obj, null, ' ')
// Add a space after every key, before the `:`:
.replace(/: "(?:[^"]+|\\")*",?$/gm, ' $&');
console.log(stringToWrite);
推荐阅读
- javascript - 带有扩展运算符的 forEach 返回未定义
- regex - perl6 正则表达式子规则和命名正则表达式比显式正则表达式慢得多;如何使它们同样快?
- java - 如何(或)是否可以使用 PrintWriter 类实现输入“*”以保存文件并在扫描仪输入后退出的逻辑?
- ethereum - 调用 web3.utils.BN.add 给出错误:无法在数字上创建属性“负数”
- scala - 找到最小的内部理解?
- postgresql - 如何在网络中备份 20TB 的数据库?
- javascript - SQLite“SELECT”包装函数返回空对象
- python - 计算数据框中多个组的 z 分数
- azure - 如何在两个虚拟网络之间建立连接?
- c# - C#如何索引数组