Python json : json.dumps, json.loads (JSON 데이터 만들기, dictionary를 JSON data로 바꾸기, dictionary를 JSON으로 바꾸기, dictionary JSON 전환, bytes를 dictionary로 바꾸기, JSON data 보기 쉽게 나타내기)
JSON (JavaScript Object Notation) 데이터는 프로그래밍에서 자주 쓰이는 형태의 데이터입니다.
다양한 정보를 보고 다루기 쉽게 저장할 수 있죠.
기본적으로 JSON data는 Python의 dictionary type과 매우 유사합니다.
Python의 dictionary를 JSON 형태의 string으로 변환하기 위해서는 json library의 dumps method를 사용하면 됩니다.
Syntax
json.dumps(dictionary, indent=n)
- dictionary
JSON 형태의 string으로 변환할 dictionary 입니다.
- indent = n
optional한 parameter입니다.
명시하지 않아도 되며 명시할 경우 출력할 때 더 보기 쉽게 n개 만큼의 공백으로 들여쓰기를 해서 나타내줍니다.
반대로 JSON data나 bytes data를 dictionary로 바꾸려면 json library의 loads method를 사용하면 됩니다.
Syntax
json.loads(json)
- json
dictionary로 변환할 JSON 또는 bytes type의 데이터입니다.
import json
dict_data = {
"category": "fruits",
"product_cnt": 2,
"product": {
"Apple": {
"price": 20000,
"weight": 3
},
"Watermelon": {
"price": 18000,
"screen_size": 2
},
}
}
print(type(dict_data))
json_data = json.dumps(dict_data)
print(json_data)
print(type(json_data))
-- Result
<class 'dict'>
{"category": "fruits", "product_cnt": 2, "product": {"Apple": {"price": 20000, "weight": 3}, "Watermelon": {"price": 18000, "screen_size": 2}}}
<class 'str'>
위 코드는 Python dictionary 데이터를 만들고 그것을 JSON type의 string으로 변환하는 코드입니다.
- json_data = json.dumps(dict_data)
이 부분이 dictionary를 JSON type string 데이터로 변환하는 부분입니다.
dict_data를 parameter로 주었습니다.
변환 후 출력된 내용을 보면 위처럼 data가 출력되며, 출력되는 JSON type string data의 타입은 당연히 문자인 string으로 보입니다.
근데 위같이 data를 나타내면 한눈에 보기가 쉽지 않죠.
아래 코드를 봅시다.
import json
dict_data = {
"category": "fruits",
"product_cnt": 2,
"product": {
"Apple": {
"price": 20000,
"weight": 3
},
"Watermelon": {
"price": 18000,
"screen_size": 2
},
}
}
print(type(dict_data))
json_data = json.dumps(dict_data, indent=4)
print(json_data)
print(type(json_data))
-- Result
<class 'dict'>
{
"category": "fruits",
"product_cnt": 2,
"product": {
"Apple": {
"price": 20000,
"weight": 3
},
"Watermelon": {
"price": 18000,
"screen_size": 2
}
}
}
<class 'str'>
- json_data = json.dumps(dict_data, indent=4)
이전과 동일하나 indent 옵션을 4로 설정하였습니다.
이 말은 공백 4개를 기본 단위로 하여 들여쓰기를 해서 JSON type string data를 나타내라는 것입니다.
그래서 출력된 결과를 보면 줄바꿈과 들여쓰기가 되어 한결 더 보기 편해졌죠.
이젠 반대로 JSON type string data를 dictionary로 바꿔보겠습니다.
import json
dict_data = {
"category": "fruits",
"product_cnt": 2,
"product": {
"Apple": {
"price": 20000,
"weight": 3
},
"Watermelon": {
"price": 18000,
"screen_size": 2
},
}
}
print(type(dict_data))
json_data = json.dumps(dict_data, indent=4)
print(json_data)
print(type(json_data))
dict_data_new = json.loads(json_data)
print(dict_data_new)
print(type(dict_data_new))
-- Result
<class 'dict'>
{
"category": "fruits",
"product_cnt": 2,
"product": {
"Apple": {
"price": 20000,
"weight": 3
},
"Watermelon": {
"price": 18000,
"screen_size": 2
}
}
}
<class 'str'>
{'category': 'fruits', 'product_cnt': 2, 'product': {'Apple': {'price': 20000, 'weight': 3}, 'Watermelon': {'price': 18000, 'screen_size': 2}}}
<class 'dict'>
- dict_data_new = json.loads(json_data)
JSON type string data를 dictionary로 바꾸려면 json library의 loads method를 사용하면 됩니다.
마지막에 dict_data_new를 출력한 것을 보면 type이 dictionary로 제대로 변환되었음을 알 수 있습니다.
이번엔 bytes type data를 dictionary로 전환해보겠습니다.
(보통 API등을 이용하면서 GET/POST 방식으로 뭔가를 호출한 후 그 결과를 return받았을 때 json 형태로 구성된 bytes type의 데이터를 전달해주는 경우가 많습니다.)
import json
bytes_test = b'{"key1":"first","key2":["element1","element2"]}'
print(type(bytes_test))
print(json.loads(bytes_test))
print(type(json.loads(bytes_test)))
-- Result
<class 'bytes'>
{'key1': 'first', 'key2': ['element1', 'element2']}
<class 'dict'>
bytes data도 똑같이 json.loads() method를 통해 dictionary로 바꿀 수 있으며, 위 예시를 보면 bytes type data가 dictionary로 바뀐 걸 알 수 있습니다.