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\'}\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用以下代码读取和打印文件数据:
\n\nfile = open("output.txt", "r")\ntext = file.read()\nfile.close()\nprint text\nRun Code Online (Sandbox Code Playgroud)\n\n没问题,和我在文件中看到的一模一样。但是当我尝试通过这样的索引打印字典的某些部分时:
\n\nfile = open("output.txt", "r")\ntext = file.read()\nfile.close()\nprint text[\'name\']\nRun Code Online (Sandbox Code Playgroud)\n\n一个错误说:
\n\n print text[\'name\']\nTypeError: string indices must be integers, not str\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我直接运行这段代码时,我可以看到它正在工作:
\n\ntemp = {\'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\']\nRun Code Online (Sandbox Code Playgroud)\n\n这里有什么问题?
\n的结果file.read()是一个字符串。Python 无法知道您需要 JSON 并神奇地转换它。
标准库中有一个模块可以将包含 JSON 的字符串转换为 Python 对象:
\n\nimport json\n\nwith open('output.txt', 'r') as fobj:\n data = json.load(fobj)\n\nprint data['name']\nRun Code Online (Sandbox Code Playgroud)\n\n另外,您应该确保 JSON 数据的格式正确。正如其他人在我之前提到的,JSON 字符串需要双引号。单引号会导致语法错误。并且不能u在引号之外使用字符。
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)\nRun Code Online (Sandbox Code Playgroud)\n\n在该文件中,output2.txt您将获得格式正确的 JSON。要将数据检索回 Python,您可以使用正确的文件名执行与上述相同的操作。
| 归档时间: |
|
| 查看次数: |
9970 次 |
| 最近记录: |