ループデータからnodeを使って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);
}
});
このjsonファイルが時間が経ってもあまり大きくならないようであれば試してみてください。
1.テーブル配列を含むjavascriptオブジェクトを作成します。
var obj = {
テーブルを作成します。[]
};
2.ここにデータを追加します。
obj.table.push({id: 1, square: 2})のように追加します。
3.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){ 。
もし(err){
console.log(err)。
} else {
obj = JSON.parse(data); //これでオブジェクトになりました。
obj.table.push({id: 2, square: 3}); //データの追加
json = JSON.stringify(obj); //データをjsonに戻す
fs.writeFile('myjsonfile.json', json, 'utf8', callback); // 書き戻す
}});
これは、最大100MBのデータに対して有効です。これ以上のサイズのデータは、データベースエンジンを使用する必要があります。
UPDATE:
現在の日付(年+月+日)を文字列で返す関数を作成します。fsモジュールには、fs.stat(path, callback)というファイルの存在を確認する関数があります。 これで、ファイルが存在するかどうかを確認することができます。存在していれば、read関数を、存在していなければ、create関数を使用します。ファイル名が今日の日付+.jsonになるので、パスには日付の文字列を使用します。
以下のプログラムをお試しください。この出力を期待しているかもしれません。
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');
}
);
このプログラムを square.js という名前の javascript ファイルに保存します。
次にコマンドプロンプトから node square.js
というコマンドでプログラムを実行します。
これは、コマンドを実行するたびに、既存のファイルを新しいデータで上書きするだけです。
それでは、コーディングをお楽しみください。
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;
})
})