【问题标题】:How to write to json file in javascript?如何在javascript中写入json文件?
【发布时间】:2016-06-16 09:39:58
【问题描述】:

我有json文件

{
    "username1": "user1",
    "password1": "***",

    "username2": "user2",
    "password2": "****",

    "username3": "user3",
    "password3": "*****"
}

我正在这样阅读我的文件:

var fs = require('fs');
var contents = fs.readFileSync('./actions/writeTo.json');
var jsonContent = JSON.parse(contents);            
console.log(jsonContent.username2);

但是我不知道如何写入这个文件,比如我想更新 username3。我该怎么做?

【问题讨论】:

  • Writing files in Node.js的可能重复
  • 你可以简单地使用 JSON.stringify
  • title 可以使用更改为“如何在 node.js 中写入 JSON”

标签: javascript json node.js


【解决方案1】:

你所做的与你阅读它时所做的完全相反。

您使用JSON.stringify 将您的数据结构转换为 JSON。然后使用fs.writeFile 将其写入文件。

【讨论】:

    【解决方案2】:

    首先,我希望这只是出于教育目的,您不打算以这种方式管理用户帐户,将明文密码存储在 json 文件中。

    其次,您似乎误用了 JSON 的结构。当您可以拥有数组时,为什么要拥有 user1user2user3 键?如果您像这样安排这些数据会更好:

    {
        "users": [
            {
                "username": "Alice",
                "anything-but-not-plaintext-password": "Puppies and kittens"
            },
            {
                "username": "Bob",
                "anything-but-not-plaintext-password": "Cheese nuggets"
            }
        ]
    }
    

    最后,您可以使用fs.writeFileSync将json写入nodejs中的文件:

    var fs = require('fs');
    var jsonContent = {}; // Here is your loader and modifier code
    var jsonString = JSON.stringify(jsonContent, null, 4); // Pretty printed
    fs.writeFileSync("./actions/writeTo.json", jsonString);
    

    但是,这就是您不能处理用户凭据的方式。这是一个关于该主题的非常好的教程:Node.js authentication series: Passport local strategy using email and password.

    【讨论】:

      【解决方案3】:

      npm install jsonfile

      var jsonfile = require('jsonfile');  
      var config = require('../support/config.json');  
      
      function writeToConfig(name, fileObj) {  
      
      fileObj.username3 = name;
      //console.log('This is to WriteFile Stringified fileObj:' +'\n\n' + JSON.stringify(fileObj) + '\n\n');
      
      jsonfile.writeFile(filePath, fileObj, function (err) {
          if (err) {
              console.error(err);
          }
      });
      }
      

      现在你可以使用这个函数并将其称为

      writeToConfig(finalRandomName, config);
      

      【讨论】:

        【解决方案4】:
        var fs = require('fs');
        var contents = fs.readFileSync('./actions/writeTo.json');
        var jsonContent = JSON.parse(contents);            
        console.log(jsonContent.username2);
        
        jsonContent.username3 = 'Changed';
        jsonContent.username4 = 'New User';
        
        var dest = '../file.json';
        
        var fd = fs.createWriteStream(dest, {
            flags: 'w',
            autoClose: true
        });
        
        fd.write(JSON.stringify(jsonContent));
        fd.end('\n');
        fd.on('finish', () => {
            //Handle success
        }).on('error', (err) => { // Handle errors
            fs.unlink(dest); // Delete the file async. (But we don't check the result)
        });
        

        【讨论】:

        • 如果我想在这个json中再写一个变量怎么办?
        • 您可以做的任何事情。只需更改对象并编写它。看编辑代码
        【解决方案5】:

        您可以使用如下代码:

        jsonContent.username3 = 'NewUsername';
        
        var body = JSON.stringify(jsonContent);
        var localPath = './actions/writeTo.json';
        fs.writeFile(localPath,body,function(err){});
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-25
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          • 1970-01-01
          • 1970-01-01
          • 2015-12-09
          • 2020-12-19
          相关资源
          最近更新 更多