Python json.decoder.JSONDecodeError:应为包含在双引号中的属性名称:第2行第1列(字符2)

Python json.decoder.JSONDecodeError:应为包含在双引号中的属性名称:第2行第1列(字符2),python,python-3.x,Python,Python 3.x,因此,我正试图构建一个类似的库管理器,作为练习编程的一种方式。它使用JSON文件来存储书籍数据。当我试图以一种好的格式打印JSON文件中存储的书籍的完整列表时,就会出现问题。代码如下: import json book = {} def add_book(): book['name'] = input('Enter a book name: ') book['author'] = input('Enter the author: ') with open('stora

因此,我正试图构建一个类似的库管理器,作为练习编程的一种方式。它使用JSON文件来存储书籍数据。当我试图以一种好的格式打印JSON文件中存储的书籍的完整列表时,就会出现问题。代码如下:

import json

book = {}

def add_book():
    book['name'] = input('Enter a book name: ')
    book['author'] = input('Enter the author: ')
    with open('storage.json', 'a') as storage:
        json.dump(book, storage)
        
def list_books():
    file = open('storage.json', 'r').readlines()
    for x in file:
        book.update(json.loads(x))
list_books()
它给了我这个错误:

"F:\LibraryManager\venv\Scripts\python.exe" "F:/LibraryManager/database.py"
Traceback (most recent call last):
  File "F:/LibraryManager/database.py", line 22, in <module>
    list_books()
  File "F:/LibraryManager/database.py", line 15, in list_books
    book.update(json.loads(x))
  File "F:\Python\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "F:\Python\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "F:\Python\lib\json\decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1 (char 2)

Process finished with exit code 1
“F:\LibraryManager\venv\Scripts\python.exe”“F:/LibraryManager/database.py”
回溯(最近一次呼叫最后一次):
文件“F:/LibraryManager/database.py”,第22行,在
图书目录
文件“F:/LibraryManager/database.py”,第15行,在清单书中
book.update(json.loads(x))
文件“F:\Python\lib\json\\ uuu init\ uuu.py”,第357行,加载
返回\u默认\u解码器。解码
文件“F:\Python\lib\json\decoder.py”,第337行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“F:\Python\lib\json\decoder.py”,第353行
obj,end=self.scan_一次(s,idx)
json.decoder.JSONDecodeError:应为包含在双引号中的属性名称:第2行第1列(字符2)
进程已完成,退出代码为1
这是JSON文件:(storage.JSON)

{ “名字”:“指环王”, “作者”:“J.R.R.托尔金” } { “名字”:“哈利波特”, “作者”:“J.K.罗琳” } { “名字”:“哈克贝利·费恩历险记”, “作者”:“马克·吐温” }


我做错了什么?

您的JSON文件格式不正确。你有:

{"name": "Lord of The Rings", "author": "J.R.R Tolkien" } 
{"name": "Harry Potter", "author": "J.K Rowling" } 
{"name": "The Adventures of Huckleberry Finn", "author": "Mark Twain" }
列表之间缺少逗号。请尝试以下方法:

{"name": "Lord of The Rings", "author": "J.R.R Tolkien"}, /* << comma here is mandatory! */
{"name": "Harry Potter", "author": "J.K Rowling"},
{"name": "The Adventures of Huckleberry Finn", "author": "Mark Twain"}

{“姓名”:“指环王”,“作者”:“J.R.R托尔金”},/*我想说你做错了两件事:1)试图将非JSON读入JSON。2) 在不显示文件内容的情况下发布此内容。在附加模式下打开文件将连接JSON对象。结果将无效。解析原始数据,更改数据并以
w
模式转储数据!也不要使用单一的全球图书词典!您的文件很可能包含单引号
,而不是双引号
@KlausD。如果他们使用
w
,则该文件仅包含一个对象,并丢失所有其他对象。@MisterNox。不,该文件包含双引号。