파이썬과 json

json(JavaScript Object Notation)은 원래 자바스크립트에서 만들어진 데이터 표현방식으로 최근들어 사용이 부쩍 증가되고 있다. 예전에는 xml방식의 데이터 교환을 많이 했다면 요새는 거의 json으로 하는 추세이다.

json은 파이썬의 딕셔너리와 매우 비슷한 모습이다.

json 표현의 예

{
    "name": "홍길동",
    "birth": "0525",
    "age": 30
}

json dumps, loads

파이썬 자료형을 json 문자열로 인코딩하는 방법에 대해서 먼저 알아보자.

json인코딩 디코딩을 위해서는 먼저 json 모듈을 import 해야 한다.

>>> import json

json문자열을 만들기 위해서는 json 모듈의 dumps 함수를 이용하면 된다.

딕셔너리를 json 문자열로 변경해 보자.

>>> j1 = {"name":"홍길동", "birth":"0525", "age": 30}
>>> j1
{'age': 30, 'birth': '0525', 'name': '홍길동'}
>>> json.dumps(j1)
'{"age": 30, "birth": "0525", "name": "\\ubc15\\uc751\\uc6a9"}'

출력되는 json문자열을 보기좋게 정렬하려면 다음처럼 indent 옵션을 추가하면 된다.

>>> print(json.dumps(j1, indent=2))
{
  "age": 30,
  "birth": "0525",
  "name": "\ubc15\uc751\uc6a9"
}

리스트나 튜플도 json 문자열로 변경해 보자.

>>> json.dumps([1,2,3])
'[1, 2, 3]'
>>> json.dumps((4,5,6))
'[4, 5, 6]'

이번에는 json모듈의 loads 함수를 이용하여 만들어진 json 문자열을 파이썬 객체로 다시 변경해 보자.

>>> j1 = {"name":"홍길동", "birth":"0525", "age": 30}
>>> d1 = json.dumps(j1)
>>> json.loads(d1)
{'name': '홍길동', 'birth': '0525', 'age': 30}

json file

이번에는 myinfo.json 이라는 json파일을 파이썬 객체로 읽어보자.

c:/jump2python/myinfo.json

{
    "name": "홍길동",
    "birth": "0525",
    "age": 30
}

위와 같은 'c:/jump2python/myinfo.json'이라는 파일을 먼저 작성한 후 다음 예제를 실행해 보자.

>>> with open('c:/jump2python/myinfo.json') as f:
...     data = json.load(f)
... 
>>> print(type(data))
<class 'dict'>
>>> print(data)
{'name': '홍길동', 'birth': '0525', 'age': 30}

json 파일을 읽을 때는 위 예처럼 loads 대신 load 함수를 이용하는 것이 편리하다. loads는 문자열을 읽어 들이고 load는 파일을 읽어 들이는 json 함수이다.

json 송수신

json은 URL요청시 입출력 데이터로 많이 활용된다. 다음의 간단한 예제를 살펴보자.

import json
import urllib.request

url = "http://ip.jsontest.com"  # URL

d = {'name': '홍길동', 'birth': '0525', 'age': 30}
params = json.dumps(d).encode("utf-8")
req = urllib.request.Request(url, data=params,
                             headers={'content-type': 'application/json'})
response = urllib.request.urlopen(req)
print(response.read().decode('utf8'))

urllib.request.Request 사용시 json문자열이 아닌 json 바이트 배열로 주고 받아야 한다는 점에 유의하자.

박응용 1176

2020년 7월 8일 10:45 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

챗봇에 뭔지 모를 json이 적혀 있어서 뭔가... 했는데 설명이 있으니 너무 반갑고 좋습니다. 자세한 설명 감사합니다~

kungmo

2020년 7월 13일 9:23 오전