2017-03-07 137 views
0

我试图将python字典转换为json,但是我正在访问的API不采用bool值,而是使用“true”/“false”字符串。将bool值转换为json.dumps()中的字符串

例子:

dct = { "is_open": True } 
json.dumps(dct) 

目前给出了一个布尔输出:{ "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来访问,而不是字符串替代真正的假值。)

+2

'json.dumps'转换布尔为 'true' O r默认为'false'字符串。 – Novel

+0

你可以包括你的代码和你想要编码的布尔如果不是'真'和'假'... – AlG

+2

嗯,“真”和“假”是JSON的布尔表示,所以你的问题是空洞的。 – wim

回答

4

如果是我,我会转换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"} 
+0

这看起来不错,但我想知道为什么要转换密钥? –

+0

为了使Python表达式{{True:“yellow”}“成为JSON文档'{”true“:”yellow“}''。您的问题不会将转换要求限制为字典值。 –