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

时间:2014-08-15 18:23:55

标签: python json dictionary

我有一个文本文件,其中json数据存储在UTF-8中,如下所示:

{'name': u'احسان', 'family': u'شیرزادی'}

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

file = open("output.txt", "r")
text = file.read()
file.close()
print text

没关系,正如我在文件中看到的那样。但是当我尝试用这样的索引打印字典的某些部分时:

file = open("output.txt", "r")
text = file.read()
file.close()
print text['name']

错误说:

    print text['name']
TypeError: string indices must be integers, not str

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

temp = {'name': u'احسان', 'family': u'شیرزادی'}
print temp['name']

这里有什么问题?

4 个答案:

答案 0 :(得分:3)

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

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

import json

with open('output.txt', 'r') as fobj:
    data = json.load(fobj)

print data['name']

此外,您应确保正确格式化JSON数据。正如其他人在我之前提到的,JSON字符串需要双引号。单引号会出现语法错误。并且您不能在引号之外添加u等字符。

data = {'name': u'احسان', 'family': u'شیرزادی'}

with open('output2.txt', w) as fobj:
    json.dump(data, fobj)

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

答案 1 :(得分:1)

你有几个问题。如果数据确实是这样存储的,那么它是无效的json,你必须以字符串形式读取它。然后你不能像字典一样访问它。

但如果您的数据在文件中看起来像这样(注意在单词前面没有u,并且使用双引号):

{“name”:“احسان”,“family”:“شیرزادی”}

然后你可以把它作为json阅读并像字典一样使用它:

import json

with open("testing.txt") as file:
    data = json.loads(file.read())
    print data["name"]

输出将是:

احسان

答案 2 :(得分:1)

数据应采用JSON格式,file.read()的输出为字符串而不是python字典,您必须将其转换为json.loads。我建议json.dumps存储您的JSON(文本)文件。

import json
data  = {'name': u'احسان', 'family': u'شیرزادی'}

file = open("output.txt", "w")
file.write(json.dumps(data))
file.close()
print data

file = open("output.txt", "r")
text = json.loads(file.read())
file.close()
print text['name']

JSON中转储后的数据应该有双引号;像这样;

{"name": "\u0627\u062d\u0633\u0627\u0646", "family": "\u0634\u06cc\u0631\u0632\u0627\u062f\u06cc"} # coding: utf-8

{"name": "احسان", "family": "شیرزادی"}

更多信息JSON python:https://docs.python.org/2/library/json.html


此致

答案 3 :(得分:0)

Json字符串需要双引号。请检查; http://json.org/example

另外,您可以查看导入json库的示例。 Reading JSON from a file?