Home > Software design >  saving class instances with json file - Python
saving class instances with json file - Python

Time:12-29

This is the class I am currently using

class Book:
   def __init__(self, title: str, author: str, isbn: int, genre: str, numCopies: int):
      self._title = title
      self._author = author
      self._isbn = isbn
      self._genre = genre
      self._numCopies = numCopies


   def __str__(self):  # all the properties of the class Book()
      return f'Title: {self._title}\nAuthor: {self._author}\nISBN: {self._isbn}\nGenre: {self._genre}\nNumber Of Copies: {self._numCopies}\n'

json file format is given to me like this:

[
  {
    "title": "How to love",
    "author": "vagabondage3",
    "isbn" : 9832,
    "genre" : "Comedy",
    "numofcopies" : 2
  },
  {
    "title": "How to eat",
    "author": "belabor",
    "isbn" : 2345,
    "genre" : "Documentary",
    "numofcopies" : 3
  }
]

the objective is to create a class instance book = Book("title","author",0,"genre",0) and then append it to the json file like this:

[
  {
    "title": "How to love",
    "author": "vagabondage3",
    "isbn" : 9832,
    "genre" : "Comedy",
    "numofcopies" : 2
  },
  {
    "title": "How to eat",
    "author": "belabor",
    "isbn" : 2345,
    "genre" : "Documentary",
    "numofcopies" : 3
  },
  {
    "title": "title",
    "author": "author",
    "isbn" : 0,
    "genre" : "genre",
    "numofcopies" : 0
   }
]

And to be fair I saw similar solutions but I can't fully understand anything

CodePudding user response:

You can use json.loads to get a dictionary from JSON, and then add a new object as in a regular dictionary.

class Book:
    def __init__(self, title: str, author: str, isbn: int, genre: str, numCopies: int):
      ...

    def get_dict(self):
        dict_obj = {
            "title": self._title,
            "author": self._author,
            "isbn" : self._isbn,
            "genre" : self._genre,
            "numofcopies" : self.__numCopies
            }

        return dict_obj

Now it is enough to call the get_dict method to get the dictionary, and through "append", add it to the list.

if __name__ == '__main__':
    with open('your.json', 'r') as f:
        books_json = f.read()

    books = json.loads(books_json)
    book = Book('title', 'author', 0, 'genre', 0)
    books.append(book.get_dict())

    with open('your.json', 'w') as f:
        f.write(json.dumps(books))
  • Related