2017-09-25 1 views
1

모두,파이썬 부울 값을 json 문자열에 인용 부호가 붙임

요구 사항에 문제가 있습니다. JSON 형식으로 변경 파이썬 부울는 다음 거 아래와 같은 솔루션을 사용할 때 일반적으로 알고, 문자열 :

>>>data = {'key1': True} 
>>>data_json = json.dumps(data) 
>>>print data_json 
{'key1': true} 

내가 가진 문제는 내가 { '진실' '키 1'}로 가질 필요가 있다는 것입니다 . 인용 '또는 큰 따옴표 "누구나 알을 할 수있는 정확하고 간단한 방법이 있습니다 감사합니다

Zhihong

+3

왜 내가 문자열로 변환하기 위해 부울을 사용해야하는지 궁금합니다. 매우 이상한 API를 먹이고 있습니까? – Felk

+0

이것은 '{'key1 ':'true '가'else 'false'}'이면 간단히 할 수있는 꽤 예측 가능한 데이터 세트입니까? 또는 임의의 값을 가진 잠재적으로 깊은 중첩 구조? – deceze

+1

잘 올바른 방법은 따옴표없이 ... 어떤 이유로 든 따옴표를 추가해야하는 경우 수동으로 처리하고 직접 추가해야합니다. – lapinkoira

답변

0

json.dumps(data)를 호출하기 전에, 그에 따라 공정 데이터 :

for key in data: 
    if type(data[key]) is bool: 
     data[key] = str(data[key]).lower() 
+0

빠른 답변을 보내 주셔서 감사합니다. – zhihong

1

키가 중첩되어 있지 않은 경우에는 str(value).lower()이라는 단순한 조작입니다. 그렇지 않으면 재귀 적으로 수행해야합니다.

# this should work for basic data types 

def convert_booleans(value): 
    if isinstance(value, dict): 
     return {key: convert_booleans(val) for key, val in value.items()} 
    elif isinstance(value, bool): 
     return str(value).lower() 
    elif hasattr(value, '__iter__'): 
     return map(convert_booleans, value) 

    return value 

converted_data = convert_booleans(data) 
print(json.dumps(converted_data)) 

이렇게 말하면 이상적인 것은 아닙니다. JSON 객체는 부울 값에 대해 특별한 의미를 지니 며 문자열로 처리해서는 안됩니다. 가능하다면 API의 클라이언트를 설득하는 것이 좋습니다. 대부분 클라이언트는 결과 데이터를 json이 아닌 문자열로 처리하므로 데이터를 파싱하기 어렵습니다.

+0

빠른 답변에 감사드립니다. 네,이 사건을 별도로 처리해야한다고 생각합니다. 감사 – zhihong

관련 문제