2017-09-25 48 views
1

所有,蟒蛇布尔值,以JSON字符串用引号

我遇到一个需求的问题。我通常知道什么时候改变蟒蛇布尔以JSON格式,那么会使用如下解决方案:

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

我的问题是,我需要把它作为{“键1”:“真正的”},串。引号'或双引号”任何人都知道有没有做任何正确的和简单的方式感谢

志宏

+3

我很好奇,为什么你需要布尔值转换成字符串。你在喂一个非常奇怪的API吗? – Felk

+0

这是一个相当可预测的数据集,你可以简单地使用'{'key1':'true'如果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