使用Python的JSON

2024-04-24 13:05:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试运行此代码,但得到错误:

Traceback (most recent call last):
  File "/Users/ccharest/Desktop/PCC/remember_me_2.py", line 7, in <module>
    username = json.load(f_obj)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

这段代码怎么了?在

^{pr2}$

更新1 根据一些人的建议,我将文件名从“usernam2.json”改为uname.json文件“而且成功了。。。为什么使用文件名“username2.json”会触发错误???在

更新 根据Alexander Huszagh的建议,“username2.json”文件已经创建,但是是空的,我删除了“username2.json”文件并再次运行脚本,它运行得很好。在


Tags: 文件inpyjsonvalueliblinelibrary
1条回答
网友
1楼 · 发布于 2024-04-24 13:05:09

正如上面的注释所示,您的代码很好。但是,文件的内容几乎肯定是空的或者不是JSON。概念快速验证:

In [1]: import json

In [2]: json.loads("a")
                                     -
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-2-98479bdf8b77> in <module>()
  > 1 json.loads("")

/usr/lib/python3.5/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    317             parse_int is None and parse_float is None and
    318             parse_constant is None and object_pairs_hook is None and not kw):
 > 319         return _default_decoder.decode(s)
    320     if cls is None:
    321         cls = JSONDecoder

/usr/lib/python3.5/json/decoder.py in decode(self, s, _w)
    337 
    338         """
 > 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    340         end = _w(s, end).end()
    341         if end != len(s):

/usr/lib/python3.5/json/decoder.py in raw_decode(self, s, idx)
    355             obj, end = self.scan_once(s, idx)
    356         except StopIteration as err:
 > 357             raise JSONDecodeError("Expecting value", s, err.value) from None
    358         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

你确定你的文件中有JSON数据吗?在

如果您有任何可识别的JSON结构,但它不是完全完整的,如以下所示,则会引发另一个解码错误:

^{pr2}$

如果要专门处理空文件示例,可以执行以下操作:

import json
path = "path/to/file.json"
try:
    json.loads(path)
except json.JsonDecodeError as error:
    if (error.msg.startswith("Expecting") and error.pos == 0):
        # ignore the error, empty file, or non-JSON grammar, so it was expecting a JSON element but found none
        # if you would like to differentiate empty files from non-JSON files, use `os.stat` on the path, or pass in a file handle as `file` and use `file.tell()` to check if it returns 0
        pass
    else:
        # another grammar issue
        raise

相关问题 更多 >