【发布时间】:2021-11-24 16:22:44
【问题描述】:
我正在使用 json 反序列化从我的 MySQL 数据库接收到的字符串,以便生成的对象是字典。
这是代码:
sql.cursorobj.execute("SELECT * FROM timetableevents")
for record in sql.cursorobj.fetchall():
print(record)
obj= record['btnobject']
detailsdict[obj]=json.loads(record['details']) #I am facing an error here
我得到的错误是:
{'btnobject': 'btnobject1', 'details': "{'sno':[], 'time':[], 'events':[]}"}
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\veeru\Python 3.9.2\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "c:\Users\veeru\OneDrive\Visual Studio\Timetable\TimeTable.py", line 186, in <lambda>
addtaskbtn.configure(command=lambda x=(btnobj, tableframe): ae.addtaskbtnclick(x[0], x[1]))
File "c:\Users\veeru\OneDrive\Visual Studio\Timetable\addevent.py", line 33, in addtaskbtnclick
updateglobalvalues(btnobj)
File "c:\Users\veeru\OneDrive\Visual Studio\Timetable\addevent.py", line 22, in updateglobalvalues
detailsdict[obj]=json.loads(f"{record['details']}")
File "C:\Users\veeru\Python 3.9.2\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:\Users\veeru\Python 3.9.2\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\veeru\Python 3.9.2\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 1 column 2 (char 1)
上述错误代码的最后一行是最重要的。
我试过用双引号明确地将record['details'] 括起来
我也使用过fstrings,例如:json.loads(f"{record['details']}")
**注意:**
请记住,json.loads(record['details']) 以前工作过,但在我更改数据库后,它就停止工作了。
【问题讨论】:
-
error msg 很清楚你的 dict 中有单引号,这使得它作为 json 无效,尝试使用
"
标签: python mysql json python-3.x dictionary