免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1146 | 回复: 0
打印 上一主题 下一主题

python自动格式化json文件 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-06-26 22:20:00每日论坛发贴之星
日期:2015-06-26 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-08 14:05 |只看该作者 |倒序浏览
将代码混乱的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()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP