두 개의 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 파일을 만들면 끝입니다.