【python】辞書オブジェクトをテキストにする時はjson.dumps(dict)

わたしへ。
こちらも検索回数が増えてきましたね。
そろそろ覚えてください。
わたしより。

結論

import json
test = {'key1':'value1','key2':'value2'}
test_json = json.dumps(test)

使いどころ

あっちからこっちにデータを送るぞーって時に、{キー:値}の辞書形式のまま送りたいんだけど、辞書オブジェクトをそのままじゃ渡せないって時に。

例えばPub/Subメッセージのbodyとして辞書オブジェクトをそのままどーん☆したい。
bodyはbase64エンコードしておかないといけない。
でも辞書オブジェクトそのままはエンコードできない。

そこで、{とか:とか}とかまで全部込みで一旦テキストにしてからエンコードしたい。

そんなときにJSONの出番だよ!

str(dict)でも一応フンワリとはテキストに出来るけど、フンワリしているので、折角JSONという規格があって、import込み2行でJSONにできるんだから、JSONにしといた方が後が楽だね。「JSONで送るよ」って言うだけで誰にでも渡せるしね。

import json

で、jsonモジュールを忘れずインポートして

json.dumps(dict)

すればJSON文字列になる。後はエンコードするなり何なり。

ちなみにJSONから元の辞書に戻すときは

json.loads(text)

Pub/Subとかで受け取ったjson文字列はこれで辞書形式にできるぞ!

備考:dumpとdumps/loadとloadsの違い

dumpとdumpsという2種類のメソッドがあるので注意。

dumpはdump(dict)で実行すると第二引数(fp)がないよー、と言われる。
fp=ファイルパスを与えてファイルに書き出す為のメソッド。
一方のdumpsは辞書を文字列にしてくれる。

一方、load系にもloadとloadsがある。

loadはJSON形式の「ファイルを」読み込んで辞書にしてくれる。
loadsは「文字列」を読み込んで辞書にしてくれる。

(sはstringのsだと思えば間違いが減りそうな気がする)

この記事が気に入ったらサポートをしてみませんか?