728x90
반응형
개요
JSON 문자열을 dict로 변환하거나, 반대로 dict를 JSON 문자열로 변한하여 처리하는 방법을 알아보겠습니다.
dict를 JSON 문자열로 변환하기
간단하게 json.dumps() 함수를 이용하면 됩니다.
from json import dumps
json_str = dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
print(json_str)
""" Result>>>
["foo", {"bar": ["baz", null, 1.0, 2]}]
"""
주의할 점은 한글과 같이 UTF 문자열 데이터가 포함되어 있는 dict를 dumps() 함수로 문자열로 변환을 시도하면 다음과 같이 인코딩되어 변환되기 때문에 바로 읽을 수가 없게 됩니다.
from json import dumps
json_str = dumps(['foo', {'데이터': ('값', None, 1.0, 2)}])
print(json_str)
""" Result>>>
["foo", {"\ub370\uc774\ud130": ["\uac12", null, 1.0, 2]}]
"""
유니코드 문자열 그대로 변환하게 하기 위하여, "ensure_ascii = False" 매개변수를 추가하여 호출합니다.
from json import dumps
json_str = dumps(['foo', {'데이터': ('값', None, 1.0, 2)}], ensure_ascii = False)
print(json_str)
""" Result>>>
["foo", {"데이터": ["값", null, 1.0, 2]}]
"""
dumps() 함수를 호출할 때 "indent" 매개변수 없이 호출을 하게 되면 JSON 문자열이 한 줄로 변환되어 눈으로 보면서 확인하기가 어렵습니다. 파일로 저장하여 사용자가 설정할 수 있도록 할 경우라면, "indent" 매개변수에 들여쓰기 값을 할당하여 예쁘게? 변환할 수 있습니다.
from json import dumps
json_str = dumps(['foo', {'데이터': ('값', None, 1.0, 2)}], ensure_ascii = False, indent = 4)
print(json_str)
""" Result>>>
[
"foo",
{
"데이터": [
"값",
null,
1.0,
2
]
}
]
"""
JSON 문자열을 dict로 변환하기
앞서 json.dumps() 함수와 반대로 JSON 문자열을 dict로 변환때에는 json.loads() 함수를 이용합니다.
from json import loads
json_str = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
data = loads(json_str)
print(data)
""" Result >>>
['foo', {'bar': ['baz', None, 1.0, 2]}]
"""
마지막으로 텍스트 파일로부터 읽어서 dict로 변환하는 예시입니다.
from json import loads
from os import path
if (not path.exists(json_file_path)):
return (None, "load json error: FileNotFoundError: [Errno 2] No such file")
with open(json_file_path, mode = "r", encoding = 'UTF-8') as f:
json_str = f.read()
try:
json_data = loads(json_str)
return (json_data, '')
except Exception as e:
return (None, f'load json error: {e}')
참고자료
- "python dictionary 를 json 으로 변환":https://bluese05.tistory.com/37
- "json — JSON encoder and decoder":https://docs.python.org/3/library/json.html
'프로그래밍 > Python' 카테고리의 다른 글
[Python] PySide2에서 'Python 코드 보기' 시, uic 관련 오류 (0) | 2023.06.28 |
---|---|
[Python] Qt - QWidget 사라질 때, 처리하는 방법 (0) | 2023.06.09 |
[Python] E8363C Network Analyzer 화면캡쳐하기 (PyVISA) (0) | 2023.05.03 |
[Python] E4446A Spectrum Analyzer 화면캡쳐하기 (PyVISA) (0) | 2023.05.02 |
[Python] pytube에서 "KeyError('streamingData')" 오류 발생 문제 (6) | 2023.05.01 |