2017-03-07 26 views
0

私はPythonディクテーションをjsonに変換しようとしていますが、私がアクセスしているAPIはbool値を取らず、代わりに "true"/"false"文字列を使用します。json.dumps()でbool値を文字列に変換する

例:

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を変更することはできません。)

+2

'json.dumps'が '本当' にブール値に変換し、Oデフォルトでは、 '偽の'文字列です。 – Novel

+0

コードを含めることができますか、 '真'と '偽'でない場合にboolをエンコードしようとしていますか... – AlG

+2

"true"と "false"は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 "}'になります。あなたの質問は、変換の要件を辞書の値に限定するものではありません。 –

関連する問題