Python で string に format を使ってる時になぜか KeyError が出る件
結論: jsonstring には format 文を使わないこと
たとえば以下のようなコードを実行すると、
value1 = 1 value2 = "2" jsonstr = '{"property":{"key1":"{:}"},"key2":{:}}'.format(value1, value2)
KeyError: '"property"' などと怒られる。
原因
原因は format 文が {}
を特別な意味として解釈するために、jsonstring 中の object 表記の {}
をも解釈してしまい狂うから。
回避策1: 古い書き方を使う
以下のように %s
を % (args)
で繋げる書き方(古い書き方)で書く。
value1 = 1 value2 = "2" jsonstr = '{"property":{"key1":"%s"},"key2":%s}' % (value1, value2) print(jsonstr)
回避策2: エスケープする
jsonstring 中の { }
を {{ }}
で書くようにする。
value1 = 1 value2 = "2" jsonstr = '{{"property":{{"key1":"{:}"}},"key2":{:}}}'.format(value1, value2) print(jsonstr)