【问题标题】:Write json content in json format to a new file in Node js将json格式的json内容写入Node js中的新文件
【发布时间】:2019-06-09 23:41:23
【问题描述】:

目标:使用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.js json fs


    【解决方案1】:

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

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

    【讨论】:

    • 当我使用 fs - fs.outputFileSync(filePath, stringToWrite) 尝试 stringToWrite 时,在打开创建的新文件时,我仍然看到带有额外斜杠的内嵌数据
    • writeFileSync 配合得很好。 stringToWrite 中的所有换行符仍然存在,并且没有斜线。
    • 它看起来也适用于outputFileSync。我无法重现您的问题。请仔细检查
    • 谢谢!这适用于给定的示例。我的实际情况是我将对象(obj)附加到一个字符串以将其传递给我的函数只接受单个参数。稍后在函数内部,我使用 split 来获取实际数据 - obj.当我使用它时,我只在文件中看到 [Object Object]。编辑问题以明确
    • 使用您的新代码,arr[1] 是一个 字符串,而不是一个对象,因此 JSON.stringify(arr[1]... 没有任何意义 - 而且,作为一个字符串,结果应该是纯字符串内容,而不是object Object。您确定您发布的代码是您实际使用的代码吗?似乎不是(需要minimal reproducible example 来复制问题)
    【解决方案2】:

    JSON.stringify,有两个可选参数,第一个是替换函数,第二个(你想要的)是间距。

    const obj = {"a":"1", "b":"2"}
    console.log(JSON.stringify(obj, null, 2))
    

    这会给你:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多