無粋な日々に

頭の中のメモ。分からないことを整理する

Python: jsonな文字列に対してformatメソッドを使う

jsonな文字列に対してformatメソッドを使う方法

pythonjson形式を含む文字列をformatメソッドを使う場合ちょっと工夫が必要だ。 例えば、以下のような文字列に対してformatメソッドを使うとエラーが出る

# jsonな文字列
json_str = """\
{'member':'{name}', 'age': 26}
"""

# formatメソッドで値を指定しようとすると
prof = json_str.format(name='john')

# エラーが出る
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-44-686c908f6197> in <module>()
----> 1 json_str.format(**{name='john'})

KeyError: "'member'"

これはプレースホルダのkeyとjsonのフォーマットのkeyをformatメソッドが区別できないかららしい。以下のように文字列中のjson用の{}を二重にしてあげるとエラーは出ない。(深い理由は知らないです。ご存知のかた教えてください)

# jsonな文字列。{}を2重にする
json_str = """\
{{'member':'{name}', 'age': 26}}
"""

prof = json_str.format(name='john')

# エラーは出ない。
print(eval(prof))

#> {'age': 26, 'member': 'john'}

json形式の文字列から、eval関数を使ってdict型のデータを生成することはよくあるので知っておくとよい。

参考