error | tip/tip

MySql json타입의 column을 nodejs에서 조회하기

meno1011 2022. 12. 26. 10:33
728x90

MySql의 테이블에 데이터를 json타입으로 저장을 했을경우

api 콜을 해서 출력을 하면 아래와 같이 string형식으로 나오게 된다.

"{\"a\": \"a-data\", \"b\": \"b-data\", \"c\": \"c-data\", \"d\": \"d-data\"}"

이럴땐 JSON.parse()를 이용해주자 

JSON.parse()를 이용하면 주석처리된것과 같은 형식이 나오게된다.

const test_json = "{\"a\": \"a-data\", \"b\": \"b-data\", \"c\": \"c-data\", \"d\": \"d-data\"}";

console.log(JSON.parse(test_json));
// { a: 'a-data', b: 'b-data', c: 'c-data', d: 'd-data' }

사용할땐 아래와 같이 변경하여 사용하면 된다.

const select = "SELECT test_json FROM TABLE";
route.get('/', (req, res) => {
	pool.query(select, (err, result) => {
    	if(err){
        	logger.error(err);
            throw err;
        }
        let results = result.map(row => ({...row, test_json : JSON.parse(row.test_json) })
        	);
        res.status(200).send(results);
    })
}

추가로 배열로 바꾼다면 아래와같이 Object.keys() 를 이용해서 사용할 수 있다.

const test_json = "{\"a\": \"a-data\", \"b\": \"b-data\", \"c\": \"c-data\", \"d\": \"d-data\"}";

console.log(JSON.parse(test_json));
//{ a: 'a-data', b: 'b-data', c: 'c-data', d: 'd-data' }


Object.keys(JSON.parse(test_json)).map((key) => {
  console.log(`key: ${key}, value: ${JSON.parse(test_json)[key]}`);
});
/*
key: a, value: a-data
key: b, value: b-data
key: c, value: c-data
key: d, value: d-data
*/