我有一些json格式的字符串,例如'{"key1":{0}, "key2":{1}}'
。
检索json字符串并用值替换后。
'{"key1":{0}, "key2":{1}}'.format("value1", "value2")
。 #KeyError: '"key1"
问题是由括号{
引起的,我应该在字符串中使用{{
和}}
,但要将{
添加到字符串中并不容易字符串,因为括号可能出现在中间部分,例如'{"key1":{0}, "key2":{1}, "{3}":"value3"}'
如何格式化json字符串?
答案 0 :(得分:2)
如果您自己构建这些字符串或控制它们,请发送不同的格式,或将值构建为字典并使用json.dumps
。
但是,如果你确实需要这样做,如果确保替换值的格式为{X}
,那么你可以使用这个kludge来转义字符串:
import re
s = '{"key1":{0}, "key2":{1}}'
begin = re.compile(r'{(?!\d)')
end = re.compile(r'(?<!\d)}')
escaped = end.sub('}}', begin.sub('{{', s))
print(escaped.format(1, 2))
结果
{"key1":1, "key2":2}
请注意,这不是最佳解决方案。考虑到你可以控制字符串,你应该以其他方式逃避它们。也许使用%
语法而不是str.format
?
答案 1 :(得分:2)
不要尝试将数据作为编码字符串进行操作。在尝试应用格式之前解码JSON。
import json
json_data = '{"key1":"{0}","key2":"{1}"}'
format_args = ["value1", "value2"]
data = json.loads(json_data)
formatted_data = {key: value.format(*format_args) for key, value in data.items()}
如果需要,您可以将格式化数据重新编码为JSON。