Python에서 바이트(bytes) 객체를 JSON 형식으로 변환하려면 먼저 바이트를 일반 문자열로 디코딩해야 합니다. 문자열 클래스의 decode() 메서드를 사용하면 원하는 인코딩 방식(예: UTF-8)을 지정하여 손쉽게 처리할 수 있습니다.
1. 바이트를 문자열로 디코딩하기
b''로 표현된 값은 바이트 문자열을 의미합니다. 이를 decode('utf-8')로 디코딩하면 일반 문자열이 됩니다.
my_str = b"Hello" # b는 바이트 문자열을 의미합니다
new_str = my_str.decode('utf-8') # utf-8 인코딩으로 디코딩
print(new_str)
실행 결과
Hello
2. 문자열을 JSON 형식으로 변환하기
바이트가 문자열로 변환되면, 표준 라이브러리인 json 모듈의 dumps() 메서드를 사용하여 해당 문자열을 JSON 형식의 문자열로 직렬화할 수 있습니다.
import json
my_str = b'{"foo": 42}' # b는 바이트 문자열을 의미합니다
new_str = my_str.decode('utf-8') # utf-8 인코딩으로 디코딩
d = json.dumps(new_str)
print(d)
실행 결과
"{\"foo\": 42}"
참고: JSON 문자열을 파이썬 객체로 변환하기
JSON 형식의 데이터를 단순한 문자열이 아니라 파이썬 dict 객체로 다루고 싶다면, 디코딩 후 json.loads()를 사용하세요. 참고로 json.loads()는 바이트 객체도 직접 받을 수 있습니다.
import json
my_bytes = b'{"foo": 42}'
data = json.loads(my_bytes)
print(data) # {'foo': 42}
print(data['foo']) # 42
정리하면, 바이트 → decode() → 문자열 → json.dumps() → JSON 문자열 순서로 처리하면 되며, 역방향으로는 json.loads()를 통해 JSON 데이터를 파이썬 객체로 변환할 수 있습니다.