python之json格式化与紧凑处理
格式化
在工作中json是我们常用的数据格式,因为格式化与紧凑存储所占的内存是不同的,格式化存储接近大一倍空间。所以有时候需要紧凑存储(一行存储),但是查看不太方便。
场景:
- 记事本打开json的速度最快,但是没有格式化功能。
- notepad++可以格式化但是需要联网安装插件,内网环境不能下载
- vscode自带格式化功能,右键->格式化,但是成千上万的文件操作拉低效率
所以,可以通过python脚本将json在格式化与紧凑之间互相转换
以下以python3为例
#coding=utf-8 import json import os import sys import io # 遍历所有文件夹下的文件 #sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码 def getFileCon(filename): if not os.path.isfile(filename): return with open(filename, encoding="utf_8_sig") as f: con = f.read() f.close() return con def writeFile(filepath,con): with open(filepath, "w") as f: f.write(con) f.close() #递归的找出目表路径下的所有文件 def get_files(dirName): for filepath,dirnames,filenames in os.walk(dirName): return filenames if __name__ == "__main__": # fl = get_files(".") filePath = '.' for filepath, dirnames, filenames in os.walk(filePath): for f in filenames: g = os.path.join(filepath, f) # print(g) if os.path.isdir(g): print(g + " it's a directory") elif os.path.isfile(g): # print(g + " it's a normal file") if not f.endswith(".json"): continue try: con = json.loads(getFileCon(g)) # print(con) # writeFile(g,json.dumps(con,indent=4,ensure_ascii=False).decode('utf8')) writeFile(g, json.dumps(con, indent=4, ensure_ascii=False)) print(g, 'OK') except Exception as e: print(g, e)
将此脚本拷贝到 指定目录下,然后cmd,执行 python formatjsonAll.py,该目录(包括子目录)下的所有json文件将格式化
紧凑
#coding=utf-8 import json import os import sys import io # 遍历所有文件夹下的文件 #sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码 def getFileCon(filename): if not os.path.isfile(filename): return with open(filename, encoding="utf_8_sig") as f: con = f.read() f.close() return con def writeFile(filepath,con): with open(filepath, "w") as f: f.write(con) f.close() #递归的找出目表路径下的所有文件 def get_files(dirName): for filepath,dirnames,filenames in os.walk(dirName): return filenames if __name__ == "__main__": # fl = get_files(".") filePath = '.' for filepath, dirnames, filenames in os.walk(filePath): for f in filenames: g = os.path.join(filepath, f) # print(g) if os.path.isdir(g): print(g + " it's a directory") elif os.path.isfile(g): # print(g + " it's a normal file") if not f.endswith(".json"): continue try: con = json.loads(getFileCon(g)) # print(con) outfile= open(g, "w") json.dump(con,outfile,ensure_ascii=False) outfile.close() print(g, 'OK') except Exception as e: print(g, e)
Json.dump用法
json.dumps()是把python对象转换成json对象的一个过程,生成的是字符串。
json.dump()是把python对象转换成json对象生成一个fp的文件流,和文件相关。
outfile= open(g, "w")
json.dump(con,outfile,ensure_ascii=False)
outfile.close()
# g是文件名,con是json数据,ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。
参考: