jsonファイルの値を更新してnode.jsを介して保存するにはどうすればよいですか?私はファイルの内容を持っています:
var file_content = fs.readFileSync(filename);
var content = JSON.parse(file_content);
var val1 = content.val1;
ここで、の値を変更val1
してファイルに保存します。
jsonファイルの値を更新してnode.jsを介して保存するにはどうすればよいですか?私はファイルの内容を持っています:
var file_content = fs.readFileSync(filename);
var content = JSON.parse(file_content);
var val1 = content.val1;
ここで、の値を変更val1
してファイルに保存します。
回答:
これを非同期で行うのは非常に簡単です。スレッドのブロックが心配な場合(可能性が高い)に特に役立ちます。
const fs = require('fs');
const fileName = './file.json';
const file = require(fileName);
file.key = "new value";
fs.writeFile(fileName, JSON.stringify(file), function writeJSON(err) {
if (err) return console.log(err);
console.log(JSON.stringify(file));
console.log('writing to ' + fileName);
});
注意点は、jsonが1行でファイルに書き込まれ、プリティファイされていないことです。例:
{
"key": "value"
}
になります...
{"key": "value"}
これを回避するには、次の2つの引数を追加するだけです。 JSON.stringify
JSON.stringify(file, null, 2)
null
-置換機能を表します。(この場合、プロセスを変更したくありません)
2
-インデントするスペースを表します。
//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));
前の回答に加えて、書き込み操作用のファイルパスディレクトリを追加します
fs.writeFile(path.join(__dirname,jsonPath), JSON.stringify(newFileData), function (err) {}
// read file and make object
let content = JSON.parse(fs.readFileSync('file.json', 'utf8'));
// edit or add property
content.expiry_date = 999999999999;
//write file
fs.writeFileSync('file.json', JSON.stringify(content));
jsonコレクションにアイテムを追加したい方のために
function save(item, path = './collection.json'){
if (!fs.existsSync(path)) {
fs.writeFile(path, JSON.stringify([item]));
} else {
var data = fs.readFileSync(path, 'utf8');
var list = (data.length) ? JSON.parse(data): [];
if (list instanceof Array) list.push(item)
else list = [item]
fs.writeFileSync(path, JSON.stringify(list));
}
}
同期(ブロッキング)関数は他の同時操作を保持するため、使用しないことを強くお勧めします。代わりに、非同期のfs.promisesを使用してください。
const fs = require('fs').promises
const setValue = (fn, value) =>
fs.readFile(fn)
.then(body => JSON.parse(body))
.then(json => {
// manipulate your data here
json.value = value
return json
})
.then(json => JSON.stringify(json))
.then(body => fs.writeFile(fn, body))
.catch(error => console.warn(error))
setValue
保留中のpromiseを返すRemeberの場合は、.then関数を使用するか、非同期関数内でawait演算子を使用する必要があります。
// await operator
await setValue('temp.json', 1) // save "value": 1
await setValue('temp.json', 2) // then "value": 2
await setValue('temp.json', 3) // then "value": 3
// then-sequence
setValue('temp.json', 1) // save "value": 1
.then(() => setValue('temp.json', 2)) // then save "value": 2
.then(() => setValue('temp.json', 3)) // then save "value": 3
タスク完了後にデータを保存する
fs.readFile("./sample.json", 'utf8', function readFileCallback(err, data) {
if (err) {
console.log(err);
} else {
fs.writeFile("./sample.json", JSON.stringify(result), 'utf8', err => {
if (err) throw err;
console.log('File has been saved!');
});
}
});