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이 파일에 한 줄로 작성되고 예쁘지 않다는 것입니다. 전의:
{
"key": "value"
}
될거야...
{"key": "value"}
이를 방지하려면 다음 두 개의 추가 인수를 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));
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!');
});
}
});