首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python json.py无法将字符串转换为字典

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

Stack Overflow用户
提问于 2021-08-20 13:46:00
回答 2查看 257关注 0票数 0

我试图将字典放入.txt文件,然后使用json.load(File.read())将字符串解析为字典。

由于某种原因,它不起作用。

代码:

代码语言:javascript
复制
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())

错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    json.loads(FIle.read())
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\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)

但当我这么做的时候

代码语言:javascript
复制
>>> json.dumps({"Key":"Value"})
'{"Key": "Value"}'
>>> json.loads('{"Key": "Value"}')
{'Key': 'Value'}
>>>

没什么不对的。

为什么会发生这种事?事先谢谢你的回答。

编辑

非常感谢在评论中建议我使用json.load()的人,它起了作用。

代码语言:javascript
复制
>>> json.load(open(r"C:\\Users\FLAK-ZOSO\Desktop\mlmlm.txt", 'r+'))
{'Key': 'Value'}
>>> Dictionary = json.load(open(r"C:\\Users\WouldYouLikeToKnow\Desktop\mlmlm.txt", 'r+'))
>>> Dictionary
{'Key': 'Value'}

问题是文件结果为空,因为在File.close()之前没有保存编辑。

谢谢你们帮助我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-14 16:24:52

json库有比json.dumps()json.loads()更多的方法。

  • json.dumps代表dump-ss代表dump-ss代表load-ss代表string

实际上,这两个方法作为参数string-type返回或传递。

代码语言:javascript
复制
>>> 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)的文件,第一个参数passed
  • json.load从作为第一个参数

传递的文件(.txt.json)中读取。

这两种方法是读取或写入.json文件。

代码语言:javascript
复制
>>> json.dumps({1: 'a'}, open('file.json', 'w+'))
>>> json.load(open('file.json', 'r'))
{'1': 'a'} #Returns an object or a value

因此,为了避免引发错误,可以避免这样做:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-08-20 13:57:52

因为我没有名誉来评论,所以我写这篇文章是作为回答。我试图在我的机器上运行您的错误代码,它没有任何问题(如果我用‘check_json.json’之类的东西替换路径的话)。这告诉我,这与你的环境有关。

当您对空字符串进行操作时,(json.decoder.JSONDecodeError:本身期望值:第1列(char 0))似乎会弹出,这意味着File.read()返回的是json.loads不知道如何处理的空字符串。

一些可能的问题可以是:

  1. --您已经在某个地方重新定义了一个保留关键字,因此Python很难让对象按其应有的方式运行(根据您使用“文件和字典”),这是一个暗处。是的,它们不是内置/保留的单词,但是谁知道right?)
  2. Something's安装中剩下的代码是什么样子的,您需要重新安装它。
  3. 您有一些奇怪的权限,阻止您将数据实际保存到正在创建的文件中。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68863306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档