안녕하세요 steady-code 입니다. 오늘은 코딩을 할 때 자주 접하는 데이터 형식인 JSON (JavaScript Object Notation)에 대해 포스팅하고자 합니다. JSON에 익숙해지면 차후 통계 데이터 분석, 웹 크롤링 등에 활용하실 수 있습니다.목차는 다음과 같습니다.
목차 1. JSON 의 정의 2. JSON 구조 (1) key and value 3. JSON 구조 (2) object 4. 활용 예시 (국가 통계청) |
1. JSON 의 정의
JSON은 '사람이 읽고 쓰기 편하며', '기계가 분석하기 편하고 생성하기 편한' 가벼운 형태의 데이터 형식입니다. 처음 JSON이 제안되었을 때는 JavaScript 의 일부로 사용되었으나, 기본적으로 문자 형태로 되어있기 때문에 JavaScript 말고도 C, C++, C#, Python 등 많은 언어에서 범용적으로 활용되기 시작했습니다. 더불어 이러한 '문자 형태'의 데이터 형식은 사용되는 언어 말고도 다른 데이터 형식으로도 변환이 굉장히 쉽기 때문에 여러 언어에서는 이러한 JSON 형태의 데이터를 csv, dataframe 등의 다른 데이터 형식으로 변환하는 함수를 제공하기도 합니다.
2. JSON 구조 (1) key and value
기초부터 살펴보겠습니다. JSON은 기본적으로 name(or key) 그리고 value 총 두가지로 이루어져 있습니다. 각각은 다음과 같이 정의될 수 있습니다.
- key - 무조건 '문자 형태' (string)
- value - JSON에서 지원하는 데이터 타입을 가질 수 있음
- '문자' (string), '숫자' (number), '배열' (array), '참거짓' (boolean), 값 없음 (null)
- JSON 에서 활용되는 object
3. JSON 구조 (2) object
JSON 에서 말하는 object 란 순서없이 나열된 name/value pair 들의 집합을 의미합니다. object는 { } 중괄호로 묶여있으며, name/value 의 pair 는 각각 콜론(:)으로 연결됩니다. 그리고 name/value pair 는 각각 쉼표 (,) 로 구분이 되어 있습니다. 확실한 이해를 위해 다음의 예시를 봅시다.
# 이름/몸무게 의 pair 를 갖는 object 생성
object = {"홍길동":"50KG", "정발산":"100KG", "김아무개":"70KG"}
위 예시처럼 key는 '문자'로 되어있으며, value는 앞서 언급한 데이터 형태 중 '문자'로 되어있습니다. key/value가 콜론으로 구분되어 있으며 key/value pair 는 각각 쉼표 (,) 로 구분이 되어있는 것을 확인하실 수 있습니다. 더 많은 형태의 object 가 존재합니다. 다음의 예시를 확인해봅시다.
# 사람의 정보에 관한 object
object =
{
"firstName": "스테디",
"lastName": "코드",
"isAlive": true,
"age": null,
"address": {
"나라": "한국",
"도시": "해당없음"
},
"phoneNumbers": [
{
"type": "home",
"number": "010 1234 1234"
},
{
"type": "office",
"number": "010 1234 1234"
}
],
"friend": [
"홍길동",
"정발산",
"김아무개"
]
}
위 예시처럼 key 와 달리 value 는 다양한 값을 가질 수 있습니다. object를 재귀적으로 사용할 수 있으며, object를 활용한 array 또한 value의 값으로 활용할 수 있습니다.
4. 활용 예시 (국가 통계청)
그렇다면 위 JSON 데이터 형식이 어떻게 활용되는지 간단히 알아봅시다. 국내 통계청 (https://kosis.kr/) 은 JSON 형태로 공공데이터를 제공합니다. 아래 데이터의 경우 value 가 '문자' 형태로 되어있음을 확인할 수 있습니다.
{"LIST_NM":"인구총조사","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_4"},{"LIST_NM":"주민등록인구현황","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_7"},{"LIST_NM":"인구동향조사","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_3"},{"LIST_NM":"장래인구추계","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_6"},{"LIST_NM":"국내인구이동통계","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_1"},{"LIST_NM":"출입국자및체류외국인통계","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_9"},{"LIST_NM":"지방자치단체외국인주민현황","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_8"},{"LIST_NM":"장래가구추계","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_5"},{"LIST_NM":"국제인구이동통계","VW_CD":"MT_ZTITLE","VW_NM":"국내통계 주제별","LIST_ID":"A_2"}
글을 마치며
JSON은 데이터 크롤링 뿐만이 아닌, 코딩을 할때 구성파일로 삽입하는 등 언어에 제약받지 않고 전반적으로 많이 활용되는 데이터 형식입니다. 추가로 궁금하신 점이 있으시면 댓글 부탁드립니다. 그리고 앞으로 꾸준히 코딩 관련한 데이터 형식 (format) 그리고 데이터 타입 (type) 에 대해 포스팅할 예정입니다. 많은 관심 부탁드립니다.
참고문헌
1. json 공식 홈페이지 (https://www.json.org/json-en.html)
2. w3 school (https://www.w3schools.com/js/js_json_objects.asp)
3. 국가 통계청 (https://kosis.kr/index/index.do)
4. wiki (https://en.wikipedia.org/wiki/JSON)