我有一个关于在Python中使用json lib时遇到的问题的问题。
我想使用json.load(file)命令使用以下代码读取json文件:
import json
filename= '../Data/exampleFile.json'
histFile= open(filename, 'w+')
print(json.load(histFile))
Run Code Online (Sandbox Code Playgroud)
根据我发现的一些网站,我尝试读取的JSON文件是有效的:该验证的屏幕截图,因为我是新手,但仍然缺乏声誉...
我收到的错误消息如下:
File ".\testLoad.py", line 5, in <module>
print(json.load(histFile))
File "C:\Users\...\Python\Python37\lib\json\__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Users\...\Python\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\...\Python\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\...\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Run Code Online (Sandbox Code Playgroud)
好的,所以我认为不是问题所在,但是在其他情况下json.load(file)对我有用。
可悲的是,我无法自己弄清楚这个错误消息,所以如果有更多处理Python-JSON交互经验的人可以帮助我,那真是太神奇了。
您打开了要写入的文件:
histFile= open(filename, 'w+')
# ^^^^
Run Code Online (Sandbox Code Playgroud)
该w模式首先将文件截断,因此文件为空(这里也可以从中读取文件,这没关系+,但文件仍被截断了)。请参阅open()功能文档:
'w':打开以进行写入,首先将文件截断)
其中没有要解析的JSON数据。这就是为什么异常告诉您在文件开始时解析失败的原因:
Expecting value: line 1 column 1 (char 0)
Run Code Online (Sandbox Code Playgroud)
第一行第一列没有数据。
如果要打开文件同时进行读取和写入而不先将其截断,请'r+'用作文件模式。