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

yipeiwu_com6年前Python基础

本文实例讲述了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程序设计有所帮助。

相关文章

Python标准库使用OrderedDict类的实例讲解

目标:创建一个字典,记录几对python词语,使用OrderedDict类来写,并按顺序输出。 写完报错: [root@centos7 tmp]# python python_ter...

使用python写一个自动浏览文章的脚本实例

创建python文件fling.py,代码如下: #!/usr/bin/env monkeyrunner import time from com.android.monkeyrun...

Python中常用信号signal类型实例

本文研究的主要是Python中的Signal 信号的相关内容,具体如下。 常用信号类型 SIGINT 终止进程 中断进程,不可通过signal.signal()捕捉(相当于Ctrl...

Python如何优雅获取本机IP方法

见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-...

浅谈numpy生成数组的零值问题

今天在用numpy写sinc函数时偶然发现在x=0时函数居然能取到1,觉得很不可思议,按理来说在x=0时函数无意义,研究了一下,发现竟然时numpy在生成数组时自动用一个很小的数代替了0...