【问题标题】:appending table of object in json file with nodejs使用nodejs在json文件中附加对象表
【发布时间】:2018-11-21 22:48:42
【问题描述】:

我想用 nodeJS 将一个对象附加到 JSON 文件中的对象数组中

我的 JSON 文件

{
  "entreprise": "kem",
  "pesee": [
    {
      "nom": "aaa",
      "prenom": "bbb"
    },
    {
      "nom": "ccc",
      "prenom": "ddd"
    },
    {
      "nom": "eee",
      "prenom": "fff"
    }
  ]
}

我想添加到 pesee 这个对象

{
      "nom": "ccc",
      "prenom": "ddd"
    },

【问题讨论】:

标签: json node.js


【解决方案1】:

试试这个。读入数据后,将新元素推送到数组中。请注意,此示例不检查重复项,并且您提供的示例已存在于数组中。在此之后,会有两组 nom:ccc,prenom:ddd。为了简单起见,这是一个同步示例。

let fs = require('fs');
let json = JSON.parse(fs.readFileSync('data.json'));
json["pesee"].push({"nom":"ccc", "prenom":"ddd"});
fs.writeFileSync('data.json', JSON.stringify(json));

【讨论】:

  • 它的工作,但一个问题,使用这种方法它复制所有文件,然后重写所有文件,如果我的 JSON 文件很大(我使用 json 文件作为数据库),它会真的很慢吗?有没有其他更快的解决方案?谢谢回复
  • 特别是对于大文件,这不是最快的解决方案。请改用 fs.readFile 和 fs.writeFile (异步),以便读写不会阻止其他任何内容的执行。您可能还想查看 MongoDB 等数据库。它本质上使用 JSON,但让您能够对数据进行查询和执行其他类似数据库的任务。
【解决方案2】:

你可以做很多事情:

1.

const myJSON = {
 "entreprise": "kem",
  "pesee": [
    {
      "nom": "aaa",
      "prenom": "bbb"
    },
    {
      "nom": "ccc",
      "prenom": "ddd"
    },
    {
      "nom": "eee",
      "prenom": "fff"
    }
  ]
}

myJSON.pesee.push({
  "nom": "ccc",
  "prenom": "ddd"
})

console.log(myJSON)

2. 如果文件中有 JSON,则可以使用 this 读取它,因此结果可以是:

fs.readJson('./myJSON')
  .then(data => {
    data.pesee.push({
      "nom": "ccc",
      "prenom": "ddd"
    })

    console.log(data)
  })
  .catch(err => console.log(err))

【讨论】:

    【解决方案3】:

    您可以使用node.js的fs文件系统库从系统中获取文件,读取并修改它。因为,该文件将读取为您需要解析 JSON 并添加对象然后将其保存回文件的文本。

    var fs = require('fs');
    var newObj = {
          "nom": "ccc",
          "prenom": "ddd"
        };
    fs.readFile('jsonFile.json', function (err, data) {
        var jsonData = JSON.parse(data);
        jsonData.pesee.push(newObj);
    
        fs.writeFile("jsonFile.json", JSON.stringify(jsonData));
    });
    

    【讨论】:

      【解决方案4】:

      您可以从内存中的 json 文件加载对象,然后可以在需要时使用它来写回。希望它可以帮助你。

      var fs = require('fs');
      var jsonDataObj = JSON.parse(fs.readFileSync( $filePath, 'utf8'));
      var newObj = {
                     "nom": "ccc",
                     "prenom": "ddd"
                    };
      jsonDataObj.pesee.push(newObj);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-08
        • 2018-05-21
        • 1970-01-01
        • 2017-05-15
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多