将bool值转换为json.dumps()

时间:2017-03-07 21:03:25

标签: python json boolean

我正在尝试将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值而不是字符串替代。)

2 个答案:

答案 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'}