일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- multicall
- 티스토리챌린지
- 러스트 기초 학습
- 스마트 컨트렉트 함수이름 중복
- vue기초
- ethers websocket
- 프록시배포구조
- 스마트컨트렉트프록시
- 컨트렉트 배포 자동화
- git rebase
- ethers type
- 체인의정석
- ethers v6
- 스마트컨트렉트 함수이름 중복 호출
- Vue.js
- ethers
- Vue
- chainlink 설명
- nest.js설명
- 러스트 기초
- 스마트컨트렉트 예약어 함수이름 중복
- 컨트렉트 동일한 함수이름 호출
- ethers typescript
- 머신러닝기초
- rust 기초
- 스마트컨트렉트테스트
- SBT표준
- 오블완
- 러스트기초
- ambiguous function description
- Today
- Total
체인의정석
날짜를 포함한 json 파일을 생성하고 원래 형태로 읽어오는 법 본문
상황 : 데이터베이스가 있는 상황에서 이를 메모리로 옮겨야 하는 상황
makeJson의 data안에 각 쿼리문의 select 결과문을 넣어서 파일을 만들고,
해당 파일을 만들어서 filter, map등을 이용해 원래 데이터를 읽어와야 하는 상황이다.
async function makeJson (filename, data) {
await fs.writeFileSync(`${__dirname}/${filename}.json`, JSON.stringify(data, null, 1));
logger.log(`${filename} updated to ${__dirname}/${filename}.json`);
}
1. writeFileSync 동기 처리를 하면서 파일을 생성한다. 함수에도 async를 걸어주면 동기처리가 된다.
2. __dirname 현재 경로를 의미한다.
파일생성시 경로를 정해줄 때 사용하였다.
3. JSON.stringify
Json 형태로 만드는데 날짜나 함수는 지원하지 않는다.
옵션이 2가지가 있는데
2번째 요소는 함수나 배열등을 넣어서 JSON 형태로 바꿀 요소들을 선택하는 과정이다.
마지막 요소는 숫자를 넣어서 JSON간의 데이터 사이에 간격을 설정해 주는것이다.
(data, null, 1)로 해두면 모든 data의 요소들을 대상으로 간격을 1 씩으로 벌려주게 된다.
아래 블로그가 잘 나와 있다.
https://blog.naver.com/pxkey/221286404342
4. JSON.parse
문자열 형태의 JSON 을 다시 JSON객체로 가져오는 것이다.
첫번째 인자는 데이터
두번째 인자는 reviver라고 하여 데이터를 가져올 때 데이터를 변형시켜서 돌려주는 함수를 넣어주면 된다.
이를 힌트로 날짜 값을 복원하는 JSON.parse를 구현한 케이스를 찾아봤다.
var dateReviver = function (key, value) {
var a;
if (typeof value === 'string') {
a = Date.parse(value);
if (a) {
return new Date(a);
}
}
return value;
}
reviver 자리에 이걸 넣으면 date 객체가 생성된다고 했다.
그래서 dateReviver를 정의한 후에 거슬리는 var만 let과 const로 변경하였다.
const dateReviver = function (key, value) {
let a;
if (typeof value === 'string') {
a = Date.parse(value);
if (a) {
return new Date(a);
}
}
return value;
}
JSON.parse(JSON.stringify(data),dateReviver);
잘 작동하는 것을 확인했고, Mocha를 통하여 쿼리문과 JSON에서 메모리에서 읽어온 것과 같은 값이 나오는 것을 확인하였다.
반대로 이걸 읽어와서 수정하고 다시 쓰는 방법은
const jsonData = JSON.parse(fs.readFileSync(`${__dirname}/${filename}.json`, {encoding : 'utf8'}))
이렇게하면 filter를 쓰고 배열에다가 결과값을 담는 형태로 데이터를 또 바꿔서 다시 파일을 쓸 수도 있다.
'개발 > backend' 카테고리의 다른 글
Javascript) map에 Promise.all을 적용하여 동기화 시키기 (0) | 2022.11.18 |
---|---|
pm2 명령어 리스트 및 활용 케이스 정리 (업데이트) (0) | 2022.11.16 |
Mocha로 테스트 하기 팁 모음 (0) | 2022.11.11 |
javascript Map vs filter 차이 (0) | 2022.11.07 |
자바스크립트 주석 달기 (업데이트) (0) | 2022.11.07 |