파이썬에서 json을 다루어 보자. 모듈을 사용하지 않는 방법도 있지만, 편하게 하기 위해 json모듈을 import 하여 사용하자.
import json
json모듈은 json형식의 문자열들을 파이썬 객체로 바꾸어주고, 그 반대로도 바꾸어준다. 그래서 어떤 파이썬 객체가 어떤 json의 어디에 해당하는지 파악하면 좀 더 편하게 다룰 수 있다. 아래는 그 표이다.
Python | Json |
None | null |
dict | Object |
list | Array |
tuple | Array |
int | Number |
float | Number |
str | String |
True | true |
False | false |
사실 이렇게 써놓아도 크게 외울 것은 없다. 숫자는 숫자고, 문자열은 문자열, True, False는 맨 앞 대문자만 다르다. json에서 python객체로 변환 시 array는 list로만 변환된다는 점을 빼면 굳이 외울 것도 없다. 파이썬 dictionary형태의 코드와 이를 json으로 바꾼 결과물은 닮았다. 아래 두 코드 중 위의 코드는 python dicionary이고 아래 코드는 json으로 변환한 결과이다.
# python dictionary
example1 = {
'name':'bruce',
'age':29,
'weight':75.4,
'hobby':['soccer','tennis'],
'married':False,
'driver_license_info':None
}
{
"name": "bruce",
"age": 29,
"weight": 75.4,
"hobby": [
"soccer",
"tennis"
],
"married": false,
"driver_license_info": null
}
Python object to Json, 파이썬 객체를 Json으로
python dictionary를 json로 변환된 문자열로 바꾸기 위해서 json모듈의 dumps를 사용하여야 한다. 위에 작성한 example1 dictionary를 그대로 사용하자.
result1 = json.dumps(example1)
print(result1)
{"name": "bruce", "age": 29, "weight": 75.4, "hobby": ["soccer", "tennis"], "married": false, "driver_license_info": null}
indent나 줄 바꿈 없이 한 줄에 다 변환되어 있다. 하지만, 사람이 읽을 때에는 이는 좀 불편하다. 좀 더 사람이 보기 편한 예쁜 형태로 바꾸기 위해 indent를 주어 처리해보자. indent에 양의 숫자를 입력하면 입력한 숫자만큼의 스페이스바 공백이 indent를 표시하기 위해 사용된다. 문자가 입력된다면 그 문자가 indent를 표시하기 위해 사용된다. 아래 두 예시를 보자.
result2 = json.dumps(example1,indent=4)
result3 = json.dumps(example1,indent='hollollo')
print(result2)
print('-----')
print(result3)
{
"name": "bruce",
"age": 29,
"weight": 75.4,
"hobby": [
"soccer",
"tennis"
],
"married": false,
"driver_license_info": null
}
-----
{
hollollo"name": "bruce",
hollollo"age": 29,
hollollo"weight": 75.4,
hollollo"hobby": [
hollollohollollo"soccer",
hollollohollollo"tennis"
hollollo],
hollollo"married": false,
hollollo"driver_license_info": null
}
일반적으로 indent에 문자를 입력할 때는 hollollo가 아닌 탭(\t)이 주로 사용된다.
sort_keys 옵션으로 key를 순서대로 정렬할 수 있다.
result4 = json.dumps(example1,indent=4,sort_keys=True)
print(result4)
{
"age": 29,
"driver_license_info": null,
"hobby": [
"soccer",
"tennis"
],
"married": false,
"name": "bruce",
"weight": 75.4
}
dumps 가 아닌 dump를 사용하면 결과물을 파일에 작성할 수 있다.
with open('resultfile.json','w') as f:
json.dump(example1,f,indent=4)
아래는 만들어진 파일의 내용이다.
{
"name": "bruce",
"age": 29,
"weight": 75.4,
"hobby": [
"soccer",
"tennis"
],
"married": false,
"driver_license_info": null
}
separators도 설정할 수 있다. 기본값은 (', ',': ')로 쉼표는 각 항목, 콜론은 key와 value를 구분하는데 쓰인다.
Json to Python Object, Json을 파이썬 객체로
json 모듈의 loads를 사용하여 json 문자열을 파이썬 객체로 바꾸자. 위에서 생성한 result1을 바꾸어 보자.
dic1 = json.loads(result1)
print(dic1)
{'name': 'bruce', 'age': 29, 'weight': 75.4, 'hobby': ['soccer', 'tennis'], 'married': False, 'driver_license_info': None}
load를 사용하면 파일의 내용을 바로 파이썬 객체로 가져올 수 있다. 아까 생성한 resultfile.json을 불러온다.
with open('resultfile.json','r') as f:
dic2 = json.load(f)
print(dic2)
{'name': 'bruce', 'age': 29, 'weight': 75.4, 'hobby': ['soccer', 'tennis'], 'married': False, 'driver_license_info': None}
'Study > Python' 카테고리의 다른 글
Python multiprocessing.Process 멀티프로세싱 1 (0) | 2021.06.03 |
---|---|
Python collections의 Counter로 개수 세기 (0) | 2021.05.27 |
python의 with 구문 (context manager) 한번 보기 (0) | 2021.05.19 |
Python에서 AhoCorasick(아호코라식) 알고리즘 구현하기 (0) | 2021.04.17 |
Python 문자열(string) 그냥 한번 대충 보기 (0) | 2021.04.14 |
댓글