json.dumps()
直接把常用引數列一下好了
引數名 解釋
obj要存入json檔案的python物件
cls預設none,則預設jsonencoder編碼,若有賦值,則是繼承此類重寫default方法,如下
class
myencoder
(json.jsonencoder):
defdefault
(self, obj):
if isinstance(obj, bytes):
return obj.decode("utf-8")
return json.jsonencoder.default(self, obj)
json值若有byte型別,json.dumps(obj,cls=myencoder)解碼才能儲存到檔案中
ensure_ascii設定為false的話才可以把中文以中文的形式存到檔案裡,否則會是』\***\***』這種
indent縮排的空格數,設定為非零值時,就起到了格式化的效果,比較美觀
也就是說在使用json.dumps()的時候設定一下indent引數的值就好了。比如json.dumps(json_dict, indent=4),加與不加的區別如下:
不加indent:
加indent=4:
遞迴實現**:
# -*- encoding: utf-8 -*-
class
jsonformatter:
def__init__
(self, intend=4, name="", encoding="utf-8"):
''' intend: 縮排空格數
name: 檔名
encoding: 檔案編碼
'''self.name = name
self.intend = intend
self.encoding = encoding
self.stack =
self.obj = none
self.source = self.get_source(name, self.encoding)
self.prepare()
@staticmethod
defjson_str
(s):
''' 給字串套上雙引號
'''return
'"' + s + '"'
@staticmethod
defget_source
(name, encoding="utf-8"):
with open(name, 'r', encoding=encoding) as f:
# 當不給split函式傳遞任何引數時,分隔符sep會採用任意形式的空白字元:空格、tab、換行、回車以及換頁符
return
''.join(f.read().split())
defprepare
(self):
try:
# python物件和json格式還是略有不同
self.source = self.source.replace("null", "none").replace("true", "true").replace("false", "false")
self.obj = eval(self.source)
except:
# json string 一定滿足python dict和list的組合
raise exception('invalid json string!')
defline_intend
(self, level=0):
return
'\n' + ' ' * self.intend * level
defparse_dict
(self,obj=none,intend_level=0):
if intend_level == 0:
# 這個判斷是為了防止檔案開頭出現空行
else:
intend_level += 1
i = 0
for key, value in obj.items():
key = self.json_str(str(key))
self.parse(value, intend_level)
if i != len(obj.items())-1:
# 這個處理是為了防止最後一對kv後面還有個逗號,這樣會造成json.load()函式無法讀取
i += 1
defparse_list
(self, obj=none, intend_level=0):
if intend_level == 0:
else:
intend_level += 1
for i, item in zip(range(0, len(obj)), obj):
self.parse(item, intend_level)
if i != len(obj)-1:
defparse
(self, obj, intend_level=0):
if obj is
none:
elif obj is
true:
elif obj is
false:
elif isinstance(obj, (int, float)):
elif isinstance(obj, str):
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)
defrender
(self):
self.parse(self.obj, 0)
res_file = self.name
res = ''.join(self.stack)
with open(res_file, 'w', encoding=self.encoding) as f:
f.write(res)
if __name__ == "__main__":
jf = jsonformatter(name="json.txt")
jf.render()
Python格式化JSON檔案
之前工作中有乙個需求是要格式化json檔案,遇到乙個問題,是要把乙個json檔案裡面的內容格式化一下,在此做個記錄 import json class jsonformat 初始化json原始檔和新檔案位址 def init self,filepath,newpath self.filepath f...
Python進行JSON格式化輸出
先寫乙個字典並將其轉換成json格式 encoding utf 8 import json dic js json.dumps dic print js 列印出的是如下這個樣子,一行式的 encoding utf 8 import json dic js json.dumps dic,sort ke...
Json格式化輸出
主要目的就是格式化輸出json,這樣將輸出的字串直接寫入本地檔案作為配置檔案,閱讀起來也比較方便。另外推薦tostringbuilder,在apache的common lang3中,輸出物件時比較直觀方便。1.9.2 org.codehaus.jackson jackson core asl org...