首页 > 解决方案 > 将json格式的json内容写入Node js中的新文件

问题描述

目标:使用Node js以json格式写入文件内容。手动打开文件后,内容应以 json 格式显示

我尝试了这两个fs-extra模块功能 -outputJsonSyncwriteFileSync将 json 内容写入文件。他们将内容内联如下

{"a":"1", "b":"2"}

但是,当我手动打开文件时,我希望看到如下内容:

{
"a" : "1",
"b" : "2"
}

我在数据上尝试了 jsomepretty-data,如下所示:

fs.outputJsonSync(jsome(data))
fs.outputJsonSync(pd.json(data))

他们还仅将数据内联写入额外\或添加到数据中\ntabs但不会以格式化样式打开。

任何输入都受到高度赞赏。谢谢!

[更新]

其他场景:

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]"

标签: node.jsjsonfs

解决方案


一旦你有了对象,你可以指定一个替换函数来用换行符分隔每个键值对,然后使用正则表达式修剪前导空格,然后使用另一个正则表达式在:键值之前插入一个空格一对。然后,只需将格式化的字符串写入文件:

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);


推荐阅读