您好,欢迎来到奥特财经网。
搜索
您的当前位置:首页python自动格式化json文件的方法

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

来源:奥特财经网


本文实例讲述了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 '
'+' '*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 © 2019- atzq.com.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务