我正试图将字典放入.txt
文件,然后使用json.load(File.read())
将字符串解析为字典。
由于某些原因,它不能工作。
代码:
import json
File = open(r"{}.txt".format(path), 'w')
File.write(json.dumps({"Key":"Value"}))
File.close()
#There the .txt file is {'Key':'Value'}
File = open(r"{}.txt".format(path), 'r')
Dictionary = json.loads(File.read())
错误:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
json.loads(FIle.read())
File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0libjson__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0libjsondecoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0libjsondecoder.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)
但是当我这样做的时候:
>>> json.dumps({"Key":"Value"})
'{"Key": "Value"}'
>>> json.loads('{"Key": "Value"}')
{'Key': 'Value'}
>>>
一切正常
为什么会发生?提前感谢您的回答。
编辑
非常感谢在评论中建议我使用json.load()
的人,它起作用了。
>>> json.load(open(r"C:\UsersFLAK-ZOSODesktopmlmlm.txt", 'r+'))
{'Key': 'Value'}
>>> Dictionary = json.load(open(r"C:\UsersWouldYouLikeToKnowDesktopmlmlm.txt", 'r+'))
>>> Dictionary
{'Key': 'Value'}
问题是文件结果为空,因为在File.close()
之前没有保存编辑。
谢谢大家对我的帮助。
由于我没有评论的声誉,所以我写这篇文章作为回答。我试着在我的机器上运行你的错误代码,它没有任何问题(只要我用'check_json.json'之类的东西替换路径)。这告诉我它与您的环境有关。
错误本身(json.decoder.JSONDecodeError: expected value: line 1 column 1 (char 0))似乎弹出当你在一个空字符串上操作,这意味着File.read()返回一个空字符串json。Loads不知道该怎么处理
一些可能的问题可能是:
- 你在某个地方重新定义了一个保留关键字,所以Python正在努力让对象表现得像它们应该的那样(根据你对File和Dictionary的使用,这是在黑暗中拍摄的)。是的,它们不是内置/保留字,但谁知道剩下的代码看起来像什么?)
- 你的Python安装有问题,你需要重新安装。
- 你有一些奇怪的权限,阻止你实际保存数据到你正在创建的这个文件。
json
库有比json.dumps()
和json.loads()
更多的方法。
json.dumps
代表dump-s
,其中s
代表string
json.loads
代表load-s
,其中s
代表string
实际上这两个方法都返回或传递了一个string
类型的参数
>>> json.dumps({1: 'a', 2: 'b'}) #Needs as parameter an object or a value
'{"1": "a", "2": "b"}' #Returns a string
>>> json.loads('{"1": "a", "2": "b"}') #Needs as parameter a string
{'1': 'a', '2': 'b'} #Parses an object or returns a value
json.dump
写入文件指定为第二个参数(.txt
或.json
)传递的第一个参数json.load
读取作为第一个参数传递的文件(.txt
或.json
)
这两个方法正在读取或写入.json
文件。
>>> json.dumps({1: 'a'}, open('file.json', 'w+'))
>>> json.load(open('file.json', 'r'))
{'1': 'a'} #Returns an object or a value
因此,为了避免引发错误,您可以避免这样做:
value = json.loads(open('file.json', 'r').read()) #Shouldn't do this
value = json.load(open('file.json', 'r')) #Much better, more efficient and it doesn't raise any error