ループ データからノードを使用して 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 ファイルが時間の経過とともに大きくなりすぎない場合は、次の操作を試してください。
テーブル配列を含むJavaScriptオブジェクトを作成する
var obj = { table: [] };
これにいくつかのデータを追加します。たとえば、次のようになります。
obj.table.push({id: 1, square:2});
オブジェクトから文字列に変換するには
JSON.stringify
var json = JSON.stringify(obj);
fsを使用してファイルをディスクに書き込む
var fs = require('fs'); fs.writeFile('myjsonfile.json', json, 'utf8', callback);
追加したい場合は、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 になります。