无法使用Python中的新元素更新json文件

时间:2019-12-22 16:36:32

标签: python json python-3.x

我不断收到此错误,但不明白为什么:

  

回溯(最近通话最近):文件   “ C:/Users/ferdin/PycharmProjects/Books/library.py”,第62行,在          carta.write_to_json_file()文件“ C:/Users/ferdin/PycharmProjects/Books/library.py”,第21行,在   write_to_json_file       json.dump( lista,f)文件“ C:\ Users \ ferdin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ json__init .py”,   179行,转储中       用于可迭代的块:文件“ C:\ Users \ ferdin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ json \ encoder.py”,   _iterencode中的第429行       从_iterencode_list(o,_current_indent_level)产生的文件“ C:\ Users \ ferdin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ json \ encoder.py”,   _iterencode_list中的第325行       从块文件“ C:\ Users \ ferdin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ json \ encoder.py”中获取,   _iterencode中的第438行       o = _default(o)文件“ C:\ Users \ ferdin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ json \ encoder.py”,   179行,默认情况下       引发TypeError(f'{o。 class 类型的对象。名称}''TypeError:Book类型的对象不可JSON序列化

这是我的代码:

import json
from libro import Libro


class Library:
    def __init__(self, filename):
        self.__filename = filename
        self.__lista = list()
        self.read_from_json_file()

    def read_from_json_file(self):
        with open(self.__filename) as file:
            self.__lista = json.load(file)

    def add(self, c):
        self.__lista.append(c)

    def write_to_json_file(self):
        with open(self.__filename, 'w') as f:
            json.dump(self.__lista, f)

    def dim(self):
        return len(self.__lista)

    def find(self, what):
        ret = []
        for c in self.__lista:
            if what in c:
                ret.append(c)
        return ret

    def delete(self, what):
        for c in self.__lista:
            if c == what:
                self.__lista.pop(c)
        return self.__lista
#
library=Library("test.csv")
book=Book()
book.set_name("Name")

[…]
library.add(book)

library.write_to_json_file()

0 个答案:

没有答案