Python 2.7子类化dict和镜像到json的问题

时间:2016-05-11 01:00:55

标签: python json python-2.7 dictionary subclass

所以我试图创建一个行为类似于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'

1 个答案:

答案 0 :(得分:0)

所以我遇到麻烦的原因是因为当你将一个元素附加到成员列表时,没有在dict上调用 setitem (甚至在列表中调用)。

Soooo ......如果有其他人有这个问题;我最终对list和dict数据类型进行了子类化,并使它们成为一个名为QJson的新类的辅助类

帮助程序类QJson下的所有列表和dicts分别转换为JDicts和JLists。

和QJson本身就是一个词典

此时代码真的很长且单片,所以这里是我github享受的链接。 :)