从文本文件检索的 json 格式的数据无法通过键名读取

ehs*_*adi 0 python json dictionary

我有一个文本文件,其中包含以 UTF-8 格式存储的 json 数据,如下所示:

\n\n
{\'name\': u\'\xd8\xa7\xd8\xad\xd8\xb3\xd8\xa7\xd9\x86\', \'family\': u\'\xd8\xb4\xdb\x8c\xd8\xb1\xd8\xb2\xd8\xa7\xd8\xaf\xdb\x8c\'}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试使用以下代码读取和打印文件数据:

\n\n
file = open("output.txt", "r")\ntext = file.read()\nfile.close()\nprint text\n
Run Code Online (Sandbox Code Playgroud)\n\n

没问题,和我在文件中看到的一模一样。但是当我尝试通过这样的索引打印字典的某些部分时:

\n\n
file = open("output.txt", "r")\ntext = file.read()\nfile.close()\nprint text[\'name\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

一个错误说:

\n\n
    print text[\'name\']\nTypeError: string indices must be integers, not str\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我直接运行这段代码时,我可以看到它正在工作:

\n\n
temp = {\'name\': u\'\xd8\xa7\xd8\xad\xd8\xb3\xd8\xa7\xd9\x86\', \'family\': u\'\xd8\xb4\xdb\x8c\xd8\xb1\xd8\xb2\xd8\xa7\xd8\xaf\xdb\x8c\'}\nprint temp[\'name\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里有什么问题?

\n

rub*_*bik 5

的结果file.read()是一个字符串。Python 无法知道您需要 JSON 并神奇地转换它。

\n\n

标准库中有一个模块可以将包含 JSON 的字符串转换为 Python 对象:

\n\n
import json\n\nwith open('output.txt', 'r') as fobj:\n    data = json.load(fobj)\n\nprint data['name']\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,您应该确保 JSON 数据的格式正确。正如其他人在我之前提到的,JSON 字符串需要双引号。单引号会导致语法错误。并且不能u在引号之外使用字符。

\n\n
data = {'name': u'\xd8\xa7\xd8\xad\xd8\xb3\xd8\xa7\xd9\x86', 'family': u'\xd8\xb4\xdb\x8c\xd8\xb1\xd8\xb2\xd8\xa7\xd8\xaf\xdb\x8c'}\n\nwith open('output2.txt', w) as fobj:\n    json.dump(data, fobj)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在该文件中,output2.txt您将获得格式正确的 JSON。要将数据检索回 Python,您可以使用正确的文件名执行与上述相同的操作。

\n