[解決済み】Node.jsでJSONファイルにデータを書き込む/追加する
2022-04-04 21:49:27
質問
ループデータから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
}
]
}
1回目に作成したファイルと同じものを使いたいのですが、このコードを実行するたびに新しい要素がその同じファイルに追加されるはずです。
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ファイルが時間とともに大きくならないのであれば、試してみるべきでしょう。
-
テーブルの配列が入った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 }});
これは、実質100MBまでのデータに対して有効です。この制限を超えると、データベースエンジンを使用する必要があります。
UPDATEしてください。
現在の日付(年+月+日)を文字列で返す関数を作成する。この文字列+.jsonという名前のファイルを作成する。fsモジュールには、fs.stat(path, callback)というファイルの存在を確認する関数がある。 これを使えば、ファイルが存在するかどうかを確認することができます。存在すればread関数を、存在しなければcreate関数を使用します。パスには日付の文字列を使います。ファイルが今日の日付 + .json という名前になるからです。
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
-
[解決済み] Node.JSを使用して、JSONファイルを(サーバー)メモリに読み込むにはどうすればよいですか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】BootstrapのCollapseが折りたたまれない
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー