json 파일에서 값을 업데이트하고 node.js를 통해 저장하는 방법
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"}
이 문제를 회피하려면 다음 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));
// 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));
이전 응답에 추가 쓰기 작업에 대한 파일 경로 디렉터리 추가
fs.writeFile(path.join(__dirname,jsonPath), JSON.stringify(newFileData), function (err) {})
동기(차단) 기능은 다른 동시 조작을 하기 때문에 사용하지 않는 것이 좋습니다.대신 비동기 fs.promes를 사용합니다.
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
보류 중인 약속을 반환합니다.그러면 함수를 사용하거나 비동기 함수 내에서 대기 연산자를 사용해야 합니다.
// 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
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.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!');
});
}
});
약속 기반 솔루션 [Javascript (ES6) + Node.js (V10 이상)]
const fsPromises = require('fs').promises;
fsPromises.readFile('myFile.json', 'utf8')
.then(data => {
let json = JSON.parse(data);
//// Here - update your json as per your requirement ////
fsPromises.writeFile('myFile.json', JSON.stringify(json))
.then( () => { console.log('Update Success'); })
.catch(err => { console.log("Update Failed: " + err);});
})
.catch(err => { console.log("Read Error: " +err);});
프로젝트가 Javascript ES8을 지원하는 경우 기본 약속 대신 비동기/대기 기능을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/10685998/how-to-update-a-value-in-a-json-file-and-save-it-through-node-js
'programing' 카테고리의 다른 글
로드하는 동안 진행 표시줄을 표시하는 방법, Ajax 사용 (0) | 2023.04.02 |
---|---|
오류: 파일 'wp-config'입니다.php'는 이미 존재합니다. (0) | 2023.04.02 |
한 페이지에 UI 부트스트랩의 날짜 피커를 두 개 이상 표시하는 방법 (0) | 2023.04.02 |
부트스트랩 카르셀이 angularjs와 함께 작동하지 않음 (0) | 2023.04.02 |
Android용 React Native 뷰에 맞게 글꼴 크기를 조정하는 방법 (0) | 2023.04.02 |