2012-05-21 5 views
41

jsonファイルの値を更新してnode.jsに保存するにはどうすればよいですか? は、私は、ファイルの内容を持っている:jsonファイルの値を更新してnode.jsに保存する方法

var file_content = fs.readFileSync(filename); 
var content = JSON.parse(file_content); 
var val1 = content.val1; 

は、今私はval1の値を変更し、ファイルに保存します。

答えて

30
//change the value in the in-memory object 
content.val1 = 42; 
//Serialize as JSON and Write it to a file 
fs.writeFileSync(filename, JSON.stringify(content)); 
+6

全体的に、これはノードの主な焦点であるため、非同期書き込みを使用する方がよいでしょう。もちろん、周囲のコードを見ることなく、決定的な答えを出すのは難しいでしょう。書き込みが完了するまで何も起こり得ないことが絶対に確実である必要がある場合を除いて、本当に同期が必要なことはまずありません。さらに、もちろん、ファイル書き込みが成功することは絶対に確信できないので、エラーチェッカーが必要です。 –

+1

非同期と同期は、どのような状況で行っているかに正確に依存します。これがネットワークサービスにある場合は、非同期が必要です。コマンドラインユーティリティの場合、シンプルなケースではsyncが適切なパラダイムですが、 "async is better"というニックネーは正しくありません。私のスニペットは、OPスニペットに基づいています。また、エラー処理に関する問題ではなく、ファイルの書き込みに失敗した場合は、スタックトレースを使用して終了することは妥当なデフォルトの動作です。 –

+0

ノードはループベースなので、asyncはほぼ常に優れているので、ループをブロックすることはありません。これはノードDevの標準的なプラクティスです。私はすでにそれが要件に依存していると言いました.Qはコマンドラインについて何も言わないと思いますか?一般に、これがより大きなコードセット(OPによって明確化されていない)の一部である場合、エラー処理は常にスマートでベストプラクティスです。スタックトレースをダンプすることはDevsにとっては大丈夫ですが、他の人にとっては間違いです。 –

57

これを非同期で行うのは簡単です。スレッドをブロックすることが懸念される場合は特に便利です(おそらく)。

var fs = require('fs'); 
var fileName = './file.json'; 
var file = require(fileName); 

file.key = "new value"; 

fs.writeFile(fileName, JSON.stringify(file), function (err) { 
    if (err) return console.log(err); 
    console.log(JSON.stringify(file)); 
    console.log('writing to ' + fileName); 
}); 

警告は、jsonが1行でファイルに書き込まれ、あらかじめ確認されていないことです。例:

{ 
    "key": "value" 
} 

は単にJSON.stringify

JSON.stringify(file, null, 2) 

nullにこれら2つの追加の引数を追加し、これを避けるために...

{"key": "value"} 

になります - 代用機能を表しています。 (この場合、プロセスを変更したくない)

2 - インデントするスペースを表します。

関連する問題