Ostatnio pojawiła się potrzeba wygenerowania z ręki małego jsona
ze sparametryzowaną treścią. Chcąc użyć w pełni pythona3 postanowiłem zastosować metodę .format
. Niestety nie było łatwo...
W uproszczeniu przyjmijmy, że nasz kod generujący json
powinien wyglądać tak:
json = "[{'param': {param}}]".format(param=1)
W efekcie oczywiście chciałbym mieć jsona w takiej formie:
In [6]: print(json) [{'parameter': 1}]
Ale nie ma tak łatwo ;). Wykonanie .format
w postaci jak wyżej powoduje jedynie wyświetlenie komunikatu błędu:
----> 1 json = "[{'parameter': {param}}]".format(param=1) KeyError: "'parameter'"
Rozwiązaniem jest wyescapowanie nawiasów klamrowych (curly braces), które mają się pojawić w docelowym stringu. Robimy to poprzez napisanie ich podwójnie. Nasz kod powinien zatem wyglądać tak:
json = "[{{'param': {param}}}]".format(param=1)
Po takich zabiegach json (lub jakikolwiek inny string z nawiasami klamrowymi w treści) wygeneruje się poprawnie.