python自动格式化json文件的方法

889次阅读  |  发布于5年以前

本文实例讲述了python自动格式化json文件的方法。分享给大家供大家参考。具体如下:

这里主要实现将代码混乱的json文件格式化。
还有一小堆python常用算法代码

完整实例代码点击此处本站下载


    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,obj=None,intend_level=0):
        self.stack.append(self.line_intend(intend_level)+'[')
        intend_level+=1
        for item in obj:
          self.parse(item,intend_level)
          self.stack.append(',')
        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()

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8