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)

参考: python - str.format() raises KeyError - Stack Overflow