본문 바로가기
Study/Python

python에서 json 다루기

by 개발새-발 2021. 5. 24.
반응형

파이썬에서 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}
반응형

댓글