使用node.js在JSON文件中写入/添加数据

时间:2016-04-26 05:48:30

标签: javascript json node.js fs

我正在尝试使用循环数据中的节点编写JSON文件 例如

var jsonfile = require('jsonfile');
for (i=0; i <11 ; i++){
   jsonfile.writeFile('loop.json', "id :" + i + " square :" + i*i);
}
loop.json中的

outPut是

id :1 square : 1

但我想要输出文件(如下所示),如果我再次运行该代码,它应该将新输出作为元素添加到相同的现有JSON文件中

{
  "table": [
    {
      "Id ": 1,
      "square ": 1
    },
    {
      "Id ": 2,
      "square ": 3
    },
    {
      "Id ": 3,
      "square ": 9
    },
    {
      "Id ": 4,
      "square ": 16
    },
    {
      "Id ": 5,
      "square ": 25
    },
    {
      "Id ": 6,
      "square ": 36
    },
    {
      "Id ": 7,
      "square ": 49
    },
    {
      "Id ": 8,
      "square ": 64
    },
    {
      "Id ": 9,
      "square ": 81
    },
    {
      "Id ": 10,
      "square ": 100
    }
  ]
}

我想使用我第一次创建的相同文件,但每当我运行该代码时,新元素应该添加到同一个文件中

var fs = require('fs');

var obj = {
   table: []
};

fs.exists('myjsonfile.json', function(exists){
    if(exists){
        console.log("yes file exists");
        fs.readFile('myjsonfile.json', function readFileCallback(err, data){
        if (err){
            console.log(err);
        } else {
        obj = JSON.parse(data); 
        for (i=0; i<5 ; i++){
        obj.table.push({id: i, square:i*i});
        }
        var json = JSON.stringify(obj); 
        fs.writeFile('myjsonfile.json', json); 
        }});
    } else {
        console.log("file not exists")
        for (i=0; i<5 ; i++){
        obj.table.push({id: i, square:i*i});
        }
        var json = JSON.stringify(obj);
        fs.writeFile('myjsonfile.json', json);
        }
    });

8 个答案:

答案 0 :(得分:288)

如果这个json文件在你应该尝试的时候不会变得太大:

  1. 创建一个包含表格数组的javascript对象

    var obj = {
       table: []
    };
    
  2. 添加一些数据,如

    obj.table.push({id: 1, square:2});
    
  3. 使用stringify将其从对象转换为字符串

    var json = JSON.stringify(obj);
    
  4. 使用fs将文件写入磁盘

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
    
  5. 如果要追加它,请读取json文件并将其转换回对象

    fs.readFile('myjsonfile.json', 'utf8', function readFileCallback(err, data){
        if (err){
            console.log(err);
        } else {
        obj = JSON.parse(data); //now it an object
        obj.table.push({id: 2, square:3}); //add some data
        json = JSON.stringify(obj); //convert it back to json
        fs.writeFile('myjsonfile.json', json, 'utf8', callback); // write it back 
    }});
    
  6. 这将有效地用于最大100 MB的数据。超过此限制,您应该使用数据库引擎。

    更新:

    创建一个函数,以字符串形式返回当前日期(年+月+日)。创建名为this string + .json的文件。 fs模块有一个函数可以检查名为fs.stat(path,callback)的文件存在。 这样,您可以检查文件是否存在。如果存在,请使用read函数,如果不存在,请使用create函数。使用日期字符串作为路径,因为该文件将被命名为今天日期+ .json。回调将包含一个stats对象,如果该文件不存在,该对象将为null。

答案 1 :(得分:14)

请尝试以下程序。你可能期待这个输出。

var fs = require('fs');

var data = {}
data.table = []
for (i=0; i <26 ; i++){
   var obj = {
       id: i,
       square: i * i
   }
   data.table.push(obj)
}
fs.writeFile ("input.json", JSON.stringify(data), function(err) {
    if (err) throw err;
    console.log('complete');
    }
);

将此程序保存在javascript文件中,例如square.js。

然后使用命令node square.js

从命令提示符运行程序

它的作用是,每次执行命令时,只需用新的数据集覆盖现有文件。

快乐编码。

答案 2 :(得分:7)

每次要向json添加新属性时,都应该读取该文件,然后添加新属性

var fs = require('fs');
fs.readFile('data.json',function(err,content){
  if(err) throw err;
  var parseJson = JSON.parse(content);
  for (i=0; i <11 ; i++){
   parseJson.table.push({id:i, square:i*i})
  }
  fs.writeFile('data.json',JSON.stringify(parseJson),function(err){
    if(err) throw err;
  })
})

答案 3 :(得分:7)

上面的例子也是正确的,但我提供了简单的例子:

var fs = require("fs");
var sampleObject = {
    name: 'pankaj',
    member: 'stack',
    type: {
        x: 11,
        y: 22
    }
};

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {
        console.error(err);
        return;
    };
    console.log("File has been created");
});

答案 4 :(得分:5)

对于格式化jsonfile,提供spaces选项,您可以将其作为参数传递:

   jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
         console.error(err);
   })

或使用jsonfile.spaces = 4。阅读详情here

我不建议每次在循环中写入文件,而是在循环中构造JSON对象并在循环外写入文件。

var jsonfile = require('jsonfile');
var obj={
     'table':[]
    };

for (i=0; i <11 ; i++){
       obj.table.push({"id":i,"square":i*i});
}
jsonfile.writeFile('loop.json', obj, {spaces:2}, function(err){
      console.log(err);
});

答案 5 :(得分:2)

尝试

var fs = require("fs");
var sampleObject = { your data };

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {  console.error(err);  return; };
    console.log("File has been created");
});

答案 6 :(得分:1)

我同意以上答案,这是为需要阅读的人提供的完整读写示例。

     router.post('/', function(req, res, next) {

        console.log(req.body);
        var id = Math.floor((Math.random()*100)+1);

        var tital = req.body.title;
        var description = req.body.description;
        var mynotes = {"Id": id, "Title":tital, "Description": description};
        
        fs.readFile('db.json','utf8', function(err,data){
            var obj = JSON.parse(data);
            obj.push(mynotes);
            var strNotes = JSON.stringify(obj);
            fs.writeFile('db.json',strNotes, function(err){
                if(err) return console.log(err);
                console.log('Note added');
            });

        })
        
        
    });


  

答案 7 :(得分:0)

对于同步方法

fs.writeFileSync('file.json', JSON.stringify(jsonVariable));