Python格式化儲存json檔案

2021-08-20 19:59:14 字數 3373 閱讀 3562

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...