我遇到一个需求的问题。我通常知道什么时候改变蟒蛇布尔以JSON格式,那么会使用如下解决方案:
>>>data = {'key1': True}
>>>data_json = json.dumps(data)
>>>print data_json
{'key1': true}
我的问题是,我需要把它作为{“键1”:“真正的”},串。引号'或双引号”任何人都知道有没有做任何正确的和简单的方式感谢
志宏
我遇到一个需求的问题。我通常知道什么时候改变蟒蛇布尔以JSON格式,那么会使用如下解决方案:
>>>data = {'key1': True}
>>>data_json = json.dumps(data)
>>>print data_json
{'key1': true}
我的问题是,我需要把它作为{“键1”:“真正的”},串。引号'或双引号”任何人都知道有没有做任何正确的和简单的方式感谢
志宏
调用json.dumps(data)
之前,处理您的数据。因此:
for key in data:
if type(data[key]) is bool:
data[key] = str(data[key]).lower()
感谢您的快速回答。 – zhihong
如果你的密钥不是嵌套的,那么这只是一个简单的操作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,因此难以解析数据。
感谢您的快速回答。是的,我想我需要分开处理这个案子。谢谢 – zhihong
我很好奇,为什么你需要布尔值转换成字符串。你在喂一个非常奇怪的API吗? – Felk
这是一个相当可预测的数据集,你可以简单地使用'{'key1':'true'如果True else'false'}'?或者是一些具有任意值的深层嵌套结构? – deceze
以及正确的方法是不带引号...如果你需要添加引号出于某种原因,那么你必须手动处理它,并自行添加 – lapinkoira