두 개의 JSON 데이터 join 하기

김준엽·2022년 6월 24일
0

JavaScript

목록 보기
4/5

두 개의 JSON 데이터를 공통된 키 값을 기준으로 SQL의 join처럼 원하는 데이터로 만드는 방법을 알아보겠습니다.

인천공항에서 운항중인 공항 데이터입니다.INCHEON_AIRPORT_DATA라고 하겠습니다.(177개)

[
  {
    "iata": "AMS",
    "nameKr": "암스테르담"
  },
  {
    "iata": "KTM",
    "nameKr": "카트만두"
  },
  {
    "iata": "OSL",
    "nameKr": "오슬로"
  },
  ...
]

모든 공항 데이터입니다. AIRPORT_DATA라고 하겠습니다.(대략 2500개)

[
  {
    "name": "A Coruna Airport",
    "nameKo": "아코루냐 공항",
    "iata": "LCG",
    "countryName": "Spain",
    "countryNameKo": "스페인",
    "cityName": "A Coruna"
  },
  {
    "name": "A. De Barros Airport",
    "nameKo": "닥터 아드헤마르 데 바로 공항",
    "iata": "PPB",
    "countryName": "Brazil",
    "countryNameKo": "브라질",
    "cityName": "Presidente Prudente"
  },
  {
    "name": "A. Neto Airport",
    "nameKo": "A. 네토 공항",
    "iata": "PNR",
    "countryName": "Democratic Republic of Congo",
    "countryNameKo": "콩고 민주공화국",
    "cityName": "Pointe Noire"
  },
  ...
]

인천공항에서 운항중인 공항 데이터 개수만큼 필요한 정보를 얻기 위해 INCHEON_AIRPORT_DATA기준으로 AIRPORT_DATA를 join하겠습니다.

import AIRPORT_DATA from 'AIRPORT_DATA.json'
import INCHEON_AIRPORT_DATA from 'INCHEON_AIRPORT_DATA.json'
import _ from 'lodash'

// lodash의 keyBy 함수를 이용해 key-value 형태로 정리합니다.
// { 'LCG': {...}, 'PPB': {...}, 'PNR': {...}, ...}
const airportObj = _.keyBy(AIRPORT_DATA, 'iata')

// key-value 형태를 이용해 iata 값으로 탐색합니다.
const result = INCHEON_AIRPORT_DATA.map((item) => ({
  ...airportObj[item.iata],
  cityNameKo: item.nameKr,
}))

// 객체를 JSON 문자열로 변환합니다.
console.log(JSON.stringify(result))

핵심은 key-value형태를 이용하는 것입니다. 콘솔에 찍힌 JSON 문자열을 복사해서 JSON 파일을 만들면 끝입니다.

profile
프론트엔드 개발자

0개의 댓글