如何在Python中格式化json字符串

时间:2015-07-07 22:37:01

标签: python json string format

我有一些json格式的字符串,例如'{"key1":{0}, "key2":{1}}'

检索json字符串并用值替换后。 '{"key1":{0}, "key2":{1}}'.format("value1", "value2")。 #KeyError: '"key1"

问题是由括号{引起的,我应该在字符串中使用{{}},但要将{添加到字符串中并不容易字符串,因为括号可能出现在中间部分,例如'{"key1":{0}, "key2":{1}, "{3}":"value3"}'

如何格式化json字符串?

2 个答案:

答案 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。