Python字符串fomat方法解析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)

4.运行结果

Alt

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值