【问题标题】:Writing JSON object to a JSON file with fs.writeFileSync使用 fs.writeFileSync 将 JSON 对象写入 JSON 文件
【发布时间】:2017-06-29 23:04:57
【问题描述】:

我正在尝试将 JSON 对象写入 JSON 文件。代码执行没有错误,但不是写入对象的内容,而是写入 JSON 文件的所有内容是:

[object Object]

这是实际编写的代码:

fs.writeFileSync('../data/phraseFreqs.json', output)

'output' 是一个 JSON 对象,并且文件已经存在。如果需要更多信息,请告诉我。

【问题讨论】:

标签: json node.js file fs


【解决方案1】:

您需要对对象进行字符串化。

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output));

【讨论】:

  • 欢迎来到 SO,在回答问题之前,请尝试查看现有答案。如果您的答案已被建议,请改为支持该答案。请参阅community guide 以获得好的答案。
  • 我喜欢这样回答问题,但没有关于是否使用同步操作与异步操作的意见。
  • 为了可读性,可以使用JSON.stringify方法的空格参数:fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));更多:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
【解决方案2】:

我认为您不应该使用同步方法,如果是object,将数据异步写入文件最好也将output 字符串化。

注意:如果output 是字符串,则指定编码并记住flag 选项。:

const fs = require('fs');
const content = JSON.stringify(output);

fs.writeFile('/tmp/phraseFreqs.json', content, 'utf8', function (err) {
    if (err) {
        return console.log(err);
    }

    console.log("The file was saved!");
}); 

添加了将数据写入文件的同步方法,但请考虑您的用例。 Asynchronous vs synchronous execution, what does it really mean?

const fs = require('fs');
const content = JSON.stringify(output);

fs.writeFileSync('/tmp/phraseFreqs.json', content);

【讨论】:

  • 如果它是在一个简短的脚本或其他东西中完成的,同步就可以了。如果它是服务器请求或其他东西的一部分,那么它应该是异步的。
  • 不一定,I/O 绑定进程应该是异步的,但根据简短的脚本复杂性,您可能会选择同步。
  • 这不是问题的答案。
  • 用户特别要求同步方法
  • 请不要再说异步好。并暗示同步不好。如果你担心速度,你的 webpack 应该为你做优化。你不是优化者。原因:json命令行工具需要同步文件写入。在将数据传输到链中的下一个应用程序之前,必须关闭他们打开的所有文件。
【解决方案3】:

通过将第三个参数传递给stringify,使 json 可读:

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 4));

【讨论】:

    【解决方案4】:

    向网络服务器发送数据时,数据必须是字符串 (here)。您可以使用 JSON.stringify() 将 JavaScript 对象转换为字符串。 Here 是一个工作示例:

    var fs = require('fs');
    
    var originalNote = {
      title: 'Meeting',
      description: 'Meeting John Doe at 10:30 am'
    };
    
    var originalNoteString = JSON.stringify(originalNote);
    
    fs.writeFileSync('notes.json', originalNoteString);
    
    var noteString = fs.readFileSync('notes.json');
    
    var note = JSON.parse(noteString);
    
    console.log(`TITLE: ${note.title} DESCRIPTION: ${note.description}`);
    

    希望对您有所帮助。

    【讨论】:

      【解决方案5】:

      这里有一个变体,使用了使用 Promise 的 fs 版本:

      const fs = require('fs');
      
      await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
      

      【讨论】:

        【解决方案6】:

        我用 chrome 打开本地文件或 url:

        const open = require('open'); // npm i open
        // open('http://google.com')
        open('build_mytest/index.html', {app: "chrome.exe"})
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多