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

How to format json string in Python

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

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

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

如何格式化 json 字符串?

如果您自己构建这些字符串或可以控制它们,请发送不同的格式,或者将值构建为字典并使用 json.dumps.

但是,如果您确实需要这样做,并且可以保证替换值的格式为 {X},那么您可以使用以下代码对字符串进行转义:

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?

不要尝试将数据作为编码字符串进行操作。在尝试应用格式之前解码 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。