80. 파이썬 json 표준 라이브러리

  • 네이버 블로그 공유하기
  • 카카오톡 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기

지난 포스팅에서는 파이썬 표준 라이브러리 중 traceback 모듈을 통해 오류가 난 위치와 원인을 찾아보는 방법을 알아 보았습니다.
이번 포스팅에서는 json 표준 라이브러리에 대해 공부해 보도록 하겠습니다.

파이썬 표준 라이브러리

json

json 은 JSON 데이터를 쉽게 처리하게 해주는 모듈입니다.
아래 개인정보를 JSON 형태의 데이터로 만든 mysecret.json 파일이 있습니다.

[파일명 : mysecret.json]

Python
{
    "name": "Python",
    "birth": "0509",
    "age": 15
}

만일 인터넷으로 이 파일을 얻었다고 가정하면 이 파일을 읽어서 파이썬에서 처리할 수 있도록 딕셔너리 자료형으로 만들려면 어떻게 하면 좋을까요?

json.load()

JSON 파일을 읽어서 딕셔너리로 변환을 하기 위해서는 아래 코드처럼 json 모듈을 사용하면 됩니다.

Python
>>> import json
>>> with open('mysecret.json') as f:
...     data = json.load(f)
...
>>> type(data)
<class 'dict'>
>>> data
{'name': 'Python', 'birth': '0509', 'age': 15}
>>>

위 코드 처럼 JSON 파일을 읽어 들일 때에는 json.load(파일 객체)처럼 사용을 하면 됩니다.
이렇게 load() 함수는 읽은 데이터를 딕셔너리 자료형으로 리턴을 하게 됩니다.

json.dump()

반대로 딕셔너리 자료형을 JSON 파일로 생성을 하고자 할 때에는 아래처럼 json.dump(딕셔너리, 파일 객체) 를 사용을 하면 됩니다.

Python
>>> import json
>>> data = {'name': 'Python', 'birth': '0509', 'age': 15}
>>> with open('mysecret.json', 'w') as f:
...     json.dump(data, f)
...
>>>

json.dumps()

이번에는 파이썬 자료형을 JSON 문자열로 만들어 보겠습니다.

Python
>>> import json
>>> d = {"name": "Python", "birth":"0509", "age": 20}
>>> json_data = json.dumps(d)
>>> json_data
'{"name": "Python", "birth": "0509", "age": 20}'
>>>

json_data 가 이상 없이 잘 출력 되는 것을 볼 수 있습니다
그런데 만약 한글이 들어간다면 어떻게 될까요?
아래 코드를 보겠습니다.

Python
>>> import json
>>> d = {"name": "파이썬", "birth":"0509", "age": 20}
>>> json_data = json.dumps(d)
>>> json_data
'{"name": "\\ud30c\\uc774\\uc36c", "birth": "0509", "age": 20}'
>>>

위 json_data 결과에서 보듯이 한글 문자열이 코드의 형태로 표시가 됩니다.
이유는 dump() 나 dumps() 함수는 기본적으로 데이터를 저장할 때 아스키 형태로 저장을 하는데 한글처럼 유니코드 문자열을 아스키 형태로 저장을 하려다 보니 한글 문자열이 깨진 것처럼 보이는 것입니다.
그래도 json.loads()를 이용해서 JSON 문자열을 딕셔너리로 다시 역변환해서 사용하는 데에는 문제가 되지는 않습니다.
아래 코드처럼요

Python
>>> json.loads(json_data)
{'name': '파이썬', 'birth': '0509', 'age': 20}
>>>

ensure_ascii=False

그래도 만약 한글 문자열이 아스키 형태의 문자열로 변경이 되는게 싫다면 이것도 방법은 있습니다.

Python
>>> d = {"name": "파이썬", "birth":"0509", "age": 20}
>>> json_data = json.dumps(d, ensure_ascii=False)
>>> json_data
'{"name": "파이썬", "birth": "0509", "age": 20}'
>>>

위 코드처럼 ensure_ascii=False 옵션을 사용을 하면 됩니다.
이 옵션의 경우 데이터를 저장을 할 때에 아스크 형태로 변환을 하지 않겠다는 옵션입니다.

indent

‘{“name”: “파이썬”, “birth”: “0509”, “age”: 20}’ 이렇게 출력되는 JSON 문자열을 보기 좋게 정렬을 해주는 indent 옵션도 있습니다.

Python
>>> d = {"name": "파이썬", "birth":"0509", "age": 20}
>>> print(json.dumps(d,indent=2, ensure_ascii=False))
{
  "name": "파이썬",
  "birth": "0509",
  "age": 20
}
>>>

딕셔너리 자료형 외에 리스트나 튜플처럼 다른 자료형도 JSON 문자열로 변경할 수가 있습니다.

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

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
80. 파이썬 json 표준 라이브러리

Leave a Comment