Python字符串format方法解析Json或者字典字符串,出现KeyError问题的解决方法
原因分析
字符串中使用json或者dict字典,{ } 转义问题。网上看到的通过双括号 {{}} 来转义其实很不方便。所以我自己写了一个 JsonFomater。
代码
1.定义一个JsonFormater类
class JsonFormater():
def __init__(self):
self.json_string = None
def set_string(self,json_string=None):
if json_string == None:
raise ValueError("注入的Json字符串不能为空")
else:
self.json_string = json_string
return self
def format(self,*pattern):
body = self.json_string
old_left = '{'
old_right = '}'
new_left = '【'
new_right = '】'
body = body.replace(old_left, new_left)
body = body.replace(old_right, new_right)
body = body.replace("【【】】", "{}")
body = body.format(*pattern)
body = body.replace(new_left, old_left)
body = body.replace(new_right, old_right)
return body
2.通过中文的【【】】双扩号来替代字符串原生的{ }进行占位
old_json_string = '{"result":【【】】,"page": {"pageNo":1,"pageSize":2},"totalCount":【【】】,"orderBySetted":false,"nextPage":【【】】}'
print("这是一个未fomat的Json字符串:",old_json_string)
3.将字符串注入JsonFomater,调用fomat方法传入参数
new_json_string = JsonFormater().set_string(old_json_string).format('staging016', 123, 'staging016')
print("这是fomat后的Json字符串",new_json_string)
4.完整示例
class JsonFormater():
def __init__(self):
self.json_string = None
def set_string(self,json_string=None):
if json_string == None:
raise ValueError("注入的Json字符串不能为空")
else:
self.json_string = json_string
return self
def format(self,*pattern):
body = self.json_string
old_left = '{'
old_right = '}'
new_left = '【'
new_right = '】'
body = body.replace(old_left, new_left)
body = body.replace(old_right, new_right)
body = body.replace("【【】】", "{}")
body = body.format(*pattern)
body = body.replace(new_left, old_left)
body = body.replace(new_right, old_right)
return body
if __name__ == '__main__':
'''
使用【【】】来替代{}占位
'''
old_json_string = '{"page":{"pageNo":1,"pageSize":2},"result":【【】】,"totalCount":【【】】,"orderBySetted":false,"nextPage":【【】】}'
print("这是一个未format的Json字符串:",old_json_string)
new_json_string = JsonFormater().set_string(old_json_string).format('staging016', 123, 'staging016')
print("这是format后的Json字符串",new_json_string)