Python json.py 无法将字符串转换为字典



我正试图将字典放入.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不知道该怎么处理

一些可能的问题可能是:

  1. 你在某个地方重新定义了一个保留关键字,所以Python正在努力让对象表现得像它们应该的那样(根据你对File和Dictionary的使用,这是在黑暗中拍摄的)。是的,它们不是内置/保留字,但谁知道剩下的代码看起来像什么?)
  2. 你的Python安装有问题,你需要重新安装。
  3. 你有一些奇怪的权限,阻止你实际保存数据到你正在创建的这个文件。

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

相关内容

  • 没有找到相关文章

最新更新