Node.jsを使用してJSONファイルにデータを書き込む/追加する 質問する

Node.jsを使用してJSONファイルにデータを書き込む/追加する 質問する

ループ データからノードを使用して JSON ファイルを書き込もうとしています。例:

let 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
      }
   ]
}

最初に作成した同じファイルを使用したいのですが、そのコードを実行するたびに、同じファイルに新しい要素が追加される必要があります

const fs = require('fs');

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

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

        let json = JSON.stringify(obj);
        fs.writeFile('myjsonfile.json', json);
    }
});

ベストアンサー1

この JSON ファイルが時間の経過とともに大きくなりすぎない場合は、次の操作を試してください。

  1. テーブル配列を含むJavaScriptオブジェクトを作成する

    var obj = {
       table: []
    };
    
  2. これにいくつかのデータを追加します。たとえば、次のようになります。

    obj.table.push({id: 1, square:2});
    
  3. オブジェクトから文字列に変換するにはJSON.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 
    }});
    

これは、最大 100 MB のデータに対して効果的に機能します。この制限を超える場合は、データベース エンジンを使用する必要があります。

アップデート:

現在の日付 (年 + 月 + 日) を文字列として返す関数を作成します。この文字列 + .json という名前のファイルを作成します。fs モジュールには、fs.stat(path, callback) という名前のファイルの存在を確認できる関数があります。これを使用して、ファイルが存在するかどうかを確認できます。存在する場合は読み取り関数を使用し、存在しない場合は作成関数を使用します。ファイル名は今日の日付 + .json になるため、日付文字列をパスとして使用します。コールバックには統計オブジェクトが含まれますが、ファイルが存在しない場合は null になります。

おすすめ記事