我正在尝试将python dict转换为json,但是我正在访问的API不使用bool值而是使用“true”/“false”字符串。
示例:
dct = { "is_open": True }
json.dumps(dct)
目前提供bool输出:{ "is_open": true }
但我想要的是小写字符串输出:
{ "is_open": "true" }
我尝试json.dumps(dct, cls=MyEncoder)
但它不起作用,只有非本机对象被传递给MyEncoder默认。
class MyEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, bool):
return str(o).lower()
return super(MyEncoder, self).default(o)
任何帮助都会很棒。
(顺便说一下,这不是我正在访问的API,因此我无法修改API以访问true false值而不是字符串替代。)
答案 0 :(得分:6)
如果是我,我会将Python数据结构转换为所需的格式,然后调用json.dumps()
:
import json
import sys
def convert(obj):
if isinstance(obj, bool):
return str(obj).lower()
if isinstance(obj, (list, tuple)):
return [convert(item) for item in obj]
if isinstance(obj, dict):
return {convert(key):convert(value) for key, value in obj.items()}
return obj
dct = {
"is_open": True
}
print (json.dumps(dct))
print (json.dumps(convert(dct)))
输出:
{"is_open": true}
{"is_open": "true"}
答案 1 :(得分:-2)
您可以使用以下单行:
{k:str(v).lower() for k,v in d.items()}
输出:
{'a': 'false', 'b': 'true'}