Json(JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다.
JSON은 두개의 구조를 기본으로 두고 있다:
https://www.json.org/json-ko.html 에 가보면 처음 보이는 내용인데 잘 이해가 되지 않습니다. Json의 아래 특징을 기억해 두고 json에 대해 좀더 알아보겠습니다.
{"name":"John"}
key는 string이여야 하며 작은따옴표가 아닌 큰따옴표로 감싸야 합니다.
Json 모든 type의 데이터가 가능합니다.
Javascript의 아래와 같은 형식은 불가능합니다.
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
위 데이터(출처)를 superHeroes 라고 할 경우
superHeroes['members'][1]['powers'][2]
는 "Superhuman reflexes"
값에 해당합니다.
실제 데이터를 파이썬에서 읽어보도록 하겠습니다. 마켓컬리의 카테고리 API에 들어가 보시면 카테고리에 대한 정보가 Json 형태로 되어 있는 것을 확인할 수 있습니다.
파이썬 requests
와 json
라이브러리를 사용해 API에서 받은 데이터를 확인해 봅니다. HTTP 헤더, HTTP 요청 메서드 그리고 상태 코드도 알아놔야 합니다.
>>> import requests
>>> import json
>>> url = "https://api.kurly.com/v2/categories"
>>> requests.get(url) # url에 접속해 GET 요청을 합니다.(데이터를 받습니다)
200
>>> requests.get(url).status_code # HTTP 상태 코드
200
>>> requests.get(url).headers['content-type'] # 헤더의 'content-type' 정보
application/json
>>> requests.get(url).encoding # 인코딩 형식
None
>>> requests.get(url).text
{"data":{"categories":[{"no":"907","name":"\ucc44\uc18c","show_all_flag":true,"pc_icon_url":"https://img-cf.kurly.com/shop/data/category/icon_veggies_inactive_pc@2x.1568681848.png","icon_url":"https://img-cf.kurly.com/shop/data/category/icon_veggies_inactive@3x.1572228806.png","pc_icon_active_url":"https://img-cf.kurly.com/shop/data/category/icon_veggies_active_pc@2x.1568681849.png","icon_active_url":"https://img-cf.kurly.com/shop/data/category/icon_veggies_active@3x.1572228807.png","categories":...
>>> json.loads(requests.get(url).text)
{'data': {'categories': [{'no': '907', 'name': '채소', 'show_all_flag': True, 'pc_icon_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_inactive_pc@2x.1568681848.png', 'icon_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_inactive@3x.1572228806.png', 'pc_icon_active_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_active_pc@2x.1568681849.png', 'icon_active_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_active@3x.1572228807.png', 'categories':
>>> requests.get(url).json()
{'data': {'categories': [{'no': '907', 'name': '채소', 'show_all_flag': True, 'pc_icon_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_inactive_pc@2x.1568681848.png', 'icon_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_inactive@3x.1572228806.png', 'pc_icon_active_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_active_pc@2x.1568681849.png', 'icon_active_url': 'https://img-cf.kurly.com/shop/data/category/icon_veggies_active@3x.1572228807.png', 'categories': [{'no': '907001', 'name': '기본채소'}, {'no': '907002', 'name': '쌈·샐러드·간편채소'}, {'no': '907003', 'name': '브로콜리·특수채소'}, {'no': '907005', 'name': '콩나물·버섯류'}, {'no': '907007', 'name': '양파·마늘·생강·파'}, {'no': '907004', 'name': '시금치·부추·나물'}, {'no': '907006', 'name': '파프리카·피망·고추'}]}, {'no': '908', 'name': '과일·견과·쌀', 'show_all_flag': True, 'pc_icon_url': 'https://img-cf.kurly.com/shop/data/category/icon_fruit_inactive_pc@2x.1568684150.png', 'icon_url': 'https://img-cf.kurly.com/shop/data/category/icon_fruit_inactive@3x.1572229045.png', 'pc_icon_active_url': 'https://img-cf.kurly.com/shop/data/category/icon_fruit_active_pc@2x.1568684150.png', 'icon_active_url': 'https://img-cf.kurly.com/shop/data/category/icon_fruit_active@3x.1572229046.png', 'categories':
마지막 두 결과값은 파이썬이 읽을 수 있는 dictionary 형식으로 변환됐습니다.