Chinaunix

标题: python自动格式化json文件 [打印本页]

作者: mahaijiang    时间: 2015-07-08 14:05
标题: python自动格式化json文件
将代码混乱的json文件格式化。
还有一小堆python常用算法代码
项目地址:https://github.com/xsank/cabbird
[Python]代码
  1. class JsonFormatter:
  2.     def __init__(self,intend=4,name=""):
  3.         self.name=name
  4.         self.intend=intend
  5.         self.stack=[]
  6.         self.obj=None
  7.         self.source=self.get_source(name)
  8.         self.prepare()

  9.     @staticmethod
  10.     def json_str(s):
  11.         return '"'+s+'"'

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

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

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

  23.     def parse_dict(self,obj=None,intend_level=0):
  24.         self.stack.append(self.line_intend(intend_level)+'{')
  25.         intend_level+=1
  26.         for key,value in obj.items():
  27.             key=self.json_str(str(key))
  28.             self.stack.append(self.line_intend(intend_level)+key+':')
  29.             self.parse(value,intend_level)
  30.             self.stack.append(',')
  31.         self.stack.append(self.line_intend(intend_level-1)+'}')

  32.     def parse_list(self,obj=None,intend_level=0):
  33.         self.stack.append(self.line_intend(intend_level)+'[')
  34.         intend_level+=1
  35.         for item in obj:
  36.             self.parse(item,intend_level)
  37.             self.stack.append(',')
  38.         self.stack.append(self.line_intend(intend_level-1)+']')

  39.     def parse(self,obj,intend_level=0):
  40.         if obj is None:
  41.             self.stack.append('null')
  42.         elif obj is True:
  43.             self.stack.append('true')
  44.         elif obj is False:
  45.             self.stack.append('false')
  46.         elif isinstance(obj,(int,long,float)):
  47.             self.stack.append(str(obj))
  48.         elif isinstance(obj,str):
  49.             self.stack.append(self.json_str(obj))
  50.         elif isinstance(obj,(list,tuple)):
  51.             self.parse_list(obj,intend_level)
  52.         elif isinstance(obj,dict):
  53.             self.parse_dict(obj,intend_level)
  54.         else:
  55.             raise Exception('Invalid json type %s!' % obj)

  56.     def render(self):
  57.         self.parse(self.obj,0)
  58.         res_file='good'+self.name
  59.         res=''.join(self.stack)
  60.         with open(res_file,'w') as f:
  61.             f.write(res)
  62.         print res

  63. if __name__=="__main__":
  64.     jf=JsonFormatter(name="json.txt")
  65.     jf.render()
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2