gpt4 book ai didi

python - 在python中读取JSON文件的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:06 25 4
gpt4 key购买 nike

>>> import json
>>> d2 = json.loads(open("t.json").read())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python2.6/json/decoder.py", line 336, in raw_decode
obj, end = self._scanner.iterscan(s, **kw).next()
File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan
rval, next_pos = action(m, context)
File "/usr/lib64/python2.6/json/decoder.py", line 185, in JSONObject
raise ValueError(errmsg("Expecting object", s, end))
ValueError: Expecting object: line 1 column 11 (char 11)
[ RHEL - ~/testing ]$ cat t.json
{"us": u"OFF", "val": u"5"}

这是我的 JSON 文件中的内容,当我尝试使用 openjson.load 和 json.loads 读取它时,它失败了。

使用json.load后

>>> import json
>>> d2 = json.load(open("t.json"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/json/__init__.py", line 267, in load
parse_constant=parse_constant, **kw)
File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python2.6/json/decoder.py", line 336, in raw_decode
obj, end = self._scanner.iterscan(s, **kw).next()
File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan
rval, next_pos = action(m, context)
File "/usr/lib64/python2.6/json/decoder.py", line 185, in JSONObject
raise ValueError(errmsg("Expecting object", s, end))
ValueError: Expecting object: line 1 column 11 (char 11)
>>>

最佳答案

您使用了错误的功能。使用 json.load()(没有 s!)从打开的文件对象加载数据:

d2 = json.load(open("t.json"))

json.loads() 函数要求您传入一个字符串,而不是文件对象。在这种情况下,您必须读取您的文件,返回读取的数据:

d2 = json.loads(open("t.json").read())

接下来,该文件中的 JSON 无效:

{"us": u"OFF", "val": u"5"}
# ^ ^

JSON 不是 Python;不支持也不需要那些 u 前缀。在加载之前,您需要从文件中删除它们。

如果您有生成该格式的 API,则它不会为您提供 JSON。可能是它正在生成一种(奇怪形式的)Python 语法; Python 本身会生成 {'us': u'OFF', 'val': u'5'}(单引号)。您可以让 Python 将其解释为带有 ast.literal_eval() 的 Python 文字:

import ast

with open('t.json') as fileobj:
d2 = ast.literal_eval(fileobj.read())

但也可能是格式以其他方式被破坏,我们无法从单个孤立样本中确定。它可以使用 truefalse 作为 bool 值,例如在 JSON 中。

最好修复 API,而不是尝试解决这个问题。

关于python - 在python中读取JSON文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29011090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com