所以我试图创建一个行为类似于dict的类,但每当对dict进行更改时,它也会将自身复制到.json文件中。我大部分时间都在工作;但是我遇到麻烦的地方是当我将某些东西附加到字典内的列表中时;它更新了dict,但没有更新与dict相关联的.json文件。
我很抱歉冗长的代码块,我试图尽可能地压缩,但它仍然相当冗长。
import json
import os.path
class JDict(dict):
def __init__(self, filepath, *args, **kwargs):
if str(filepath).split('.')[-1] == 'json':
self.filepath = str(filepath)
else:
self.filepath = str('{}.json'.format(filepath))
if os.path.isfile(self.filepath):
super(JDict, self).__init__(self.read())
else:
super(JDict, self).__init__(*args, **kwargs)
self.write()
def __setitem__(self, key, value):
dict.__setitem__(self, key, value)
self.write()
def write(self):
with open(self.filepath, 'w') as outfile:
json.dump(self, outfile, sort_keys = True, indent = 4,
ensure_ascii=False)
def read(self):
with open(self.filepath, 'r') as infile:
jsonData = json.load(infile)
self = jsonData
return self
def parseJson(filepath):
with open(filepath, 'r') as infile:
jsonData = json.load(infile)
return jsonData
test = JDict("test.json", {
"TestList": [
"element1"
]
})
test["TestList"].append("element2")
try:
if test["TestList"][1] == parseJson("test.json")["TestList"][1]:
print 'Success'
except IndexError:
print 'Failure'
答案 0 :(得分:0)
所以我遇到麻烦的原因是因为当你将一个元素附加到成员列表时,没有在dict上调用 setitem (甚至在列表中调用)。
Soooo ......如果有其他人有这个问题;我最终对list和dict数据类型进行了子类化,并使它们成为一个名为QJson的新类的辅助类
帮助程序类QJson下的所有列表和dicts分别转换为JDicts和JLists。
和QJson本身就是一个词典
此时代码真的很长且单片,所以这里是我github享受的链接。 :)