如何在 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。
我有一些 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。