nodeJS #12 JSON데이터 파싱하기

수박·2020년 8월 12일
1

nodejs

목록 보기
13/19

nodeJS #12 JSON데이터 파싱하기


DB에서 받아온 데이터를 우리가 만든 더미데이터의 형식에 맞게 가공해야하는 일을 해야한다.

JSON은 객체 형태로 키와 값을 가진다.

{
	"키":"값",
	"키2":"값2"
}

이렇게만있으면 얼마나 좋을까?

{ ftseoul: [
      {
          키1:값,
          키2:값2,
          키3:값3,
          키4:값4
      },
      {
      	동일
      }
      {
     	 동일
      }
    ],
    ssafy : [
      {
          키1:값,
          키2:값2,
          키3:값3,
          키4:값4
      },
      {
      	동일
      }
      {
     	 동일
      }
        
    ]
    }

일단 이렇게 만들어야한다!

{ftseoul : [ {키...}, { 키... } ] ssafy: [ { 키.. }] } 이렇게 존재한다.

먼저 전체를 감싸는 객체를 생성해준다.

let obj = {};

그리고 쿼리문의 결과로 받아온 result의 객체를 map반복을 통해서 진행하도록한다.

result.map(v => {...})

v는 result의 각 객체로 중복되는 값이 존재하고 있다.

우리가 원하는 형태는 ftseoul이라는 중복되지 않은 단 하나의 키안에 배열,그리고 그 안에 객체가 존재해야하므로 먼저 각 프로그램에 해당하는 이름을 가진 키에 배열의 값을 가진 것을 할당해주도록 한다.


result.map(v => {
	if (!(v.program in obj))
		obj[v.program] = [];
})

현재 obj는 빈 객체이므로, v의 program값을 가지고 있지 않으므로 첫 반복에는 obj의 첫 program명의 키에 배열이 할당된다.

{"ftseoul":[]}

이렇게 모든 프로그램이 반복되면,

{"ftseoul":[]},"ssafy":[],"boostcamp":[],"soma":[],"woowa":[],"likelion":[]

다음과 같은 형태가 된다.

이제 프로그램을 키로 갖는 값(배열)에 객체를 넣어주면 원하는 데이터 형태로 만들 수 있다.

코드는 다음과 같다.

  db.query(sql, (error, result) => {
    if (error) throw error;
    let obj = {};
    //데이터를 담을 객체 obj 생성
    result.map(v => { 
      //쿼리문 결과가 객체 배열, 이를 반복함.
     if (!(v.program in obj))
        obj[v.program] = [];        
        //객체에서 program이라는 키가 obj에 존재하지 않으면, 해당 키값에 대한 배열 생성
      obj[v.program].push(v);
      //program의 키값을 갖는 객체에 v객체 할당.
      delete v['program'];
      //program의 키는 사용하지 않으므로 삭제함.
    })
    console.log(obj);
     res.json(obj);
  })
})

0개의 댓글