我有一个文本文件,其中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']
这里有什么问题?
答案 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?