加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python自动格式化json文件

发布时间:2020-12-17 17:23:12 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 class JsonFormatter: def __init__(self,intend=4,name=""): self.name=name self.intend=intend self.stack=[] self.obj=None self.source=self.get

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

class JsonFormatter:
    def __init__(self,intend=4,name=""):
        self.name=name
        self.intend=intend
        self.stack=[]
        self.obj=None
        self.source=self.get_source(name)
        self.prepare()

    @staticmethod
    def json_str(s):
        return '"'+s+'"'

    @staticmethod
    def get_source(name):
        with open(name,'r') as f:
            return ''.join(f.read().split())

    def prepare(self):
        try:
            self.obj=eval(self.source)
        except:
            raise Exception('Invalid json string!')

    def line_intend(self,level=0):
        return 'n'+' '*self.intend*level

    def parse_dict(self,obj=None,intend_level=0):
        self.stack.append(self.line_intend(intend_level)+'{')
        intend_level+=1
        for key,value in obj.items():
            key=self.json_str(str(key))
            self.stack.append(self.line_intend(intend_level)+key+':')
            self.parse(value,intend_level)
            self.stack.append(',')
        self.stack.append(self.line_intend(intend_level-1)+'}')

    def parse_list(self,intend_level=0):
        self.stack.append(self.line_intend(intend_level)+'[')
        intend_level+=1
        for item in obj:
            self.parse(item,')
        self.stack.append(self.line_intend(intend_level-1)+']')

    def parse(self,obj,intend_level=0):
        if obj is None:
            self.stack.append('null')
        elif obj is True:
            self.stack.append('true')
        elif obj is False:
            self.stack.append('false')
        elif isinstance(obj,(int,long,float)):
            self.stack.append(str(obj))
        elif isinstance(obj,str):
            self.stack.append(self.json_str(obj))
        elif isinstance(obj,(list,tuple)):
            self.parse_list(obj,intend_level)
        elif isinstance(obj,dict):
            self.parse_dict(obj,intend_level)
        else:
            raise Exception('Invalid json type %s!' % obj)

    def render(self):
        self.parse(self.obj,0)
        res_file='good'+self.name
        res=''.join(self.stack)
        with open(res_file,'w') as f:
            f.write(res)
        print res

if __name__=="__main__":
    jf=JsonFormatter(name="json.txt")
    jf.render()

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读