json이란?

whybein·2020년 2월 11일
0
post-thumbnail

1. Json 이란

Json(JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다.

JSON은 두개의 구조를 기본으로 두고 있다:

  • name/value 형태의 쌍으로 collection 타입. 다양한 언어들에서, 이는 object, record, struct(구조체), dictionary, hash table, 키가 있는 list, 또는 연상배열로서 실현 되었다.
  • 값들의 순서화된 리스트. 대부분의 언어들에서, 이는 array, vector, list, 또는 sequence로서 실현 되었다.

https://www.json.org/json-ko.html 에 가보면 처음 보이는 내용인데 잘 이해가 되지 않습니다. Json의 아래 특징을 기억해 두고 json에 대해 좀더 알아보겠습니다.

  • Json은 JavaScript 문법을 따르는 문자열 데이터입니다.
  • 오늘날 대부분의 web은 JavaScript 기반으로 돌아갑니다.
  • 그래서 web에서 데이터를 주고 받을 때 대부분 json형식을 씁니다.
  • 보낼 때는 Json 형식으로 바꿔서 보내고, 받을 때는 Json 형식을 parsing(구문 분석)해서 사용합니다.
  • Douglas_Crockford가 널리 퍼트렸다고 합니다.('How Javascript Works'라는 책의 저자)



2. Json 구조

 

2.1 key : value 형식

{"name":"John"}

key는 string이여야 하며 작은따옴표가 아닌 큰따옴표로 감싸야 합니다.

 

2.2 value로 가능한 data type

Json 모든 type의 데이터가 가능합니다.

  • string
  • number
  • array
  • boolean
  • null
  • object(순서가 없는 key:value의 배열)

Javascript의 아래와 같은 형식은 불가능합니다.

  • 함수
  • 날짜
  • undefined

 


3. Json data 예시

{
  "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" 값에 해당합니다.

 


4. python과 Json

Json to Python

실제 데이터를 파이썬에서 읽어보도록 하겠습니다. 마켓컬리의 카테고리 API에 들어가 보시면 카테고리에 대한 정보가 Json 형태로 되어 있는 것을 확인할 수 있습니다.

파이썬 requestsjson 라이브러리를 사용해 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 형식으로 변환됐습니다.

profile
Back-End Developer

0개의 댓글