728x90
반응형
python에서 dictionary 모양으로 되어 있는 string을 dictionary 타입으로 바꿔주는 방법 중에 json이 있습니다.
import json
# Assume that dict_shaped_string
string_to_dict = json.loads(dict_shaped_string)
print(type(string_to_dict) # output: 'dict'
그런데 json.loads를 이용할 때 주의할 점이 있습니다.
대표적으로
- ' 이 아니라 " 을 써야하는 점(double quote)
- Javascript 형태로 boolean을 써야하는 점입니다.(True/False: X, true/false: O)
구체적인 예제코드로 살펴보겠습니다.
import json
sample_1 = {"python": "so good"}
sample_1_string = str(sample_1)
sample_2_string = '{"react":"not bad"}'
sample_3_string = "{'docker':'I like'}"
sample_4_string = '{"hungry?":True}'
sample_5_string = '{"Angry?":false}'
try:
json_dict_1 = json.loads(sample_1_string)
print(json_dict_1)
except Exception as E:
print("1:",E)
try:
json_dict_2 = json.loads(sample_2_string)
print(json_dict_2)
except Exception as E:
print("2:",E)
try:
json_dict_3 = json.loads(sample_3_string)
print(json_dict_3)
except Exception as E:
print("3:",E)
try:
json_dict_4 = json.loads(sample_4_string)
print(json_dict_4)
except Exception as E:
print("4:",E)
try:
json_dict_5 = json.loads(sample_5_string)
print(json_dict_5)
except Exception as E:
print("5:",E)
Output:
1: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
{'react': 'not bad'}
3: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
4: Expecting value: line 1 column 12 (char 11)
{'Angry?': False}
single quote(')를 쓴 경우 / str()로 dict를 string으로 만들어 준 경우 / boolean을 python에서 쓰는 형태로 쓴 경우
이 경우에서는 json.loads()가 에러가 발생합니다.
이점에 주의해서 사용해야 합니다.
애초에 이런 문제를 피하기 위해, Python에서는 eval, literal_eval이 사용 가능합니다.
다음 포스팅에서는 eval과 literal_eval에 대해서 다뤄보겠습니다.
728x90
반응형
'Python' 카테고리의 다른 글
sort # 복수의 값으로 정렬할 때 (0) | 2023.01.28 |
---|---|
Python: insert() # insert argument in list (0) | 2023.01.23 |
__init__.py # import # from . (0) | 2023.01.18 |
sum() in Python (0) | 2023.01.11 |
zip # python 여러 list, set 등을 묶어서 for loop 돌기 (0) | 2023.01.08 |