新郑IT教育网


python站群系统

武将宠妻手簿-Python加载带有注释的Json文件实例

发布于2019-05-1410:10:08|126次阅读|评论:0|来源:网友投递

Python是一种面向对象、解释型计算机程序设计语言,由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

今天小编就为大家分享一篇Python加载带有注释的Json文件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

由于json文件不支持注释,所以如果在json文件中标记了注释,则使用武将宠妻手簿中的json.dump()无法加载该json文件。

本文旨在解决当定义“//”为json注释时,如何正确解析有注释的json文件。

#encoding:utf-8 importjson importre importsys reload(sys) sys.setdefaultencoding('utf8') CAUTION_PRINT_HEAD='caution:' #创建一个xstr类,用于处理从文件中读出的字符串 classxstr: def__init__(self,instr): self.instr=instr #删除“//”标志后的注释 defrmCmt(self): qtCnt=cmtPos=slashPos=0 rearLine=self.instr #rearline:前一个“//”之后的字符串, #双引号里的“//”不是注释标志,所以遇到这种情况,仍需继续查找后续的“//” whilerearLine.find('//')>=0:#查找“//” slashPos=rearLine.find('//') cmtPos+=slashPos #print'slashPos:'+str(slashPos) headLine=rearLine[:slashPos] whileheadLine.find('"')>=0:#查找“//”前的双引号 qtPos=headLine.find('"') ifnotself.isEscapeOpr(headLine[:qtPos]):#如果双引号没有被转义 qtCnt+=1#双引号的数量加1 headLine=headLine[qtPos+1:] #printqtCnt ifqtCnt%2==0:#如果双引号的数量为偶数,则说明“//”是注释标志 #printself.instr[:cmtPos] returnself.instr[:cmtPos] rearLine=rearLine[slashPos+2:] #printrearLine cmtPos+=2 #printself.instr returnself.instr #判断是否为转义字符 defisEscapeOpr(self,instr): iflen(instr)<=0: returnFalse cnt=0 whileinstr[-1]=='\\': cnt+=1 instr=instr[:-1] ifcnt%2==1: returnTrue else: returnFalse #从json文件的路径JsonPath读取该文件,返回json对象 defloadJson(JsonPath): try: srcJson=open(JsonPath,'r') except: printCAUTION_PRINT_HEAD+'cannotopen'+JsonPath quit() dstJsonStr='' forlineinsrcJson.readlines(): ifnotre.match(r'\s*//',line)andnotre.match(r'\s*\n',line): xline=xstr(line) dstJsonStr+=xline.rmCmt() #printdstJsonStr dstJson={} try: dstJson=json.loads(dstJsonStr) returndstJson except: printCAUTION_PRINT_HEAD+JsonPath+'isnotavalidjsonfile' quit() #带缩进地在屏幕输出json字符串 defprintRes(武将宠妻手簿): 武将宠妻手簿=武将宠妻手簿.replace(',',',\n') 武将宠妻手簿=武将宠妻手簿.replace('{','{\n') 武将宠妻手簿=武将宠妻手簿.replace(':{',':\n{') 武将宠妻手簿=武将宠妻手簿.replace('}','\n}') 武将宠妻手簿=武将宠妻手簿.replace('[','\n[\n') 武将宠妻手簿=武将宠妻手簿.replace(']','\n]') 武将宠妻手簿=武将宠妻手簿 resArray=武将宠妻手簿.split('\n') preBlank='' forlineinresArray: iflen(line)==0: continue lastChar=line[len(line)-1] lastTwoChars=line[len(line)-2:] iflastCharin{'}',']'}orlastTwoCharsin{'},','],'}: preBlank=preBlank[:len(preBlank)-2] try: printpreBlank+line.decode('utf-8') except: print(preBlank+'[%Thislinecannotbedecoded%]') iflastChar=='{'orlastChar=='[': preBlank+=''*2

以上这篇Python加载带有注释的Json文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)

Python实现短网址ShortUrl的Hash运算实例讲解

利用Python中unittest实现简单的单元测试实例详解