본문 바로가기

Python

Python: json.loads() # string to dict # doble quotes # Boolean

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
반응형