Python json.decoder.JSONDecodeError:应为包含在双引号中的属性名称:第2行第1列(字符2)
因此,我正试图构建一个类似的库管理器,作为练习编程的一种方式。它使用JSON文件来存储书籍数据。当我试图以一种好的格式打印JSON文件中存储的书籍的完整列表时,就会出现问题。代码如下: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
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。不,该文件包含双引号。