2017-03-07 139 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「}''。您的問題不會將轉換要求限制爲字典值。 –