私はループデータからノードを使用して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);
}
});
このjsonファイルが時間の経過とともに大きくなりすぎない場合は、試してみる必要があります。
テーブル配列を含むJavaScriptオブジェクトを作成します。
var obj = {
table: []
};
好きなようにデータを追加してください
obj.table.Push({id: 1, square:2});
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)というファイルの存在を確認できる機能があります。これにより、ファイルが存在するかどうかを確認できます。存在する場合はread関数を使用し、存在しない場合はcreate関数を使用します。ファイルに今日の日付+ .jsonという名前が付けられるパスcuzとして日付文字列を使用します。コールバックにはstatsオブジェクトが含まれ、ファイルが存在しない場合はnullになります。
次のプログラムを試してください。あなたはこの出力を期待しているかもしれません。
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
を使用してコマンドプロンプトからプログラムを実行します。
つまり、コマンドを実行するたびに、既存のファイルを新しいデータセットで上書きするだけです。
ハッピーコーディング.
上記の例も正しいですが、私は簡単な例を提供します:
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");
});
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;
})
})
フォーマットするためにjsonfileはあなたがパラメータとして渡すことができるspaces
オプションを与えます:
jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
console.error(err);
})
またはjsonfile.spaces = 4
を使用してください。詳細を読む ここ 。
ループ内で毎回ファイルに書き込むことはお勧めしません。代わりにループ内で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);
});
同期アプローチの場合
const fs = require('fs')
fs.writeFileSync('file.json', JSON.stringify(jsonVariable));
やってみる
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");
});