以下代码引发
KeyError
异常:
addr_list_formatted = []
addr_list_idx = 0
for addr in addr_list: # addr_list is a list
addr_list_idx = addr_list_idx + 1
addr_list_formatted.append("""
"{0}"
{
"gamedir" "str"
"address" "{1}"
}
""".format(addr_list_idx, addr))
为什么?
我正在使用 Python 3.1.
问题是那些
{
和 }
字符没有指定格式化键。您需要将它们加倍,因此将您的代码更改为:
addr_list_formatted.append("""
"{0}"
{{
"gamedir" "str"
"address" "{1}"
}}
""".format(addr_list_idx, addr))
使用
str.format()
格式化 JSON 字符串并不理想,因为您必须转义大括号,如已接受的答案所述。
虽然这种方法可能适用于小型 JSON 模板,但如果有很多花括号需要转义,它可能会使模板难以阅读。
更好的选择是 string.Template:
from string import Template
addr_list = ["address 1, country 1", "address 2, country 2"]
addr_list_formatted = []
addr_list_idx = 0
template = Template("""
"${index}"
{
"gamedir" "str"
"address" "${address}"
}
""")
for addr in addr_list:
addr_list_idx = addr_list_idx + 1
formatted = template.substitute(index=addr_list_idx, address=addr)
addr_list_formatted.append(formatted)