Python 从文本文件检索的json格式的数据不能通过键名读取
我有一个文本文件,其中json数据存储在UTF-8中,如下所示:Python 从文本文件检索的json格式的数据不能通过键名读取,python,json,dictionary,Python,Json,Dictionary,我有一个文本文件,其中json数据存储在UTF-8中,如下所示: {'name': u'احسان', 'family': u'شیرزادی'} file = open("output.txt", "r") text = file.read() file.close() print text['name'] 我尝试使用以下代码读取和打印文件数据: file = open("output.txt", "r") text = file.read() file.close() print tex
{'name': u'احسان', 'family': u'شیرزادی'}
file = open("output.txt", "r")
text = file.read()
file.close()
print text['name']
我尝试使用以下代码读取和打印文件数据:
file = open("output.txt", "r")
text = file.read()
file.close()
print text
这没问题,正如我在文件中看到的那样。但当我试图通过如下索引打印字典的某些部分时:
{'name': u'احسان', 'family': u'شیرزادی'}
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']
这里有什么问题?Json字符串需要双引号。请查收; 您还可以看看这个导入json库的示例。
Json字符串需要双引号。请查收; 您还可以看看这个导入json库的示例。
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,可以使用正确的文件名执行与上面相同的操作。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,可以使用正确的文件名执行与上面相同的操作。您有几个问题。如果数据确实是这样存储的,那么它不是有效的json,您必须将其作为字符串读入。然后你就不能像查字典一样查了
但是,如果文件中的数据与此类似(请注意,单词前面没有u,并且使用双引号):
{“姓名”:“家庭”:“家庭”:“姓名”
然后,您可以将其作为json读入并像使用字典一样使用:
import json
with open("testing.txt") as file:
data = json.loads(file.read())
print data["name"]
输出将是:
你有几个问题。如果数据确实是这样存储的,那么它不是有效的json,您必须将其作为字符串读入。然后你就不能像查字典一样查了 但是,如果文件中的数据与此类似(请注意,单词前面没有u,并且使用双引号): {“姓名”:“家庭”:“家庭”:“姓名” 然后,您可以将其作为json读入并像使用字典一样使用:
import json
with open("testing.txt") as file:
data = json.loads(file.read())
print data["name"]
输出将是:
اح㶍ن数据应为JSON格式,
文件的输出。read()
是字符串而不是python字典,您必须通过JSON.loads
对其进行转换。我建议使用json.dumps
存储json(文本)文件
JSON中转储后的数据应该有双引号;像这样,
{"name": "\u0627\u062d\u0633\u0627\u0646", "family": "\u0634\u06cc\u0631\u0632\u0627\u062f\u06cc"} # coding: utf-8
或
更多信息:
考虑到,数据应该是JSON格式,并且
文件的输出。read()
是字符串而不是python字典,您必须通过JSON.loads
转换它。我建议使用json.dumps
存储json(文本)文件
JSON中转储后的数据应该有双引号;像这样,
{"name": "\u0627\u062d\u0633\u0627\u0646", "family": "\u0634\u06cc\u0631\u0632\u0627\u062f\u06cc"} # coding: utf-8
或
更多信息:
关于,JSON需要双引号。单引号是不合法的。而且字符串之外的
u
肯定是不合法的。请参见www.json.org问题在于text
是一个字符串(通常通过file.read
)而不是字典,所以你不能只做text['name']
@JonathanM我不认为问题是你的观点。我已经更新了问题的最后一部分。@hlt那我该怎么办?@ehsanshirzadi,你永远不会将json字符串转换为对象。更正json后使用json.load
。Python中的对象标记方式不同于JSON中的对象标记方式。JSON需要双引号。单引号是不合法的。而且字符串之外的u
肯定是不合法的。请参见www.json.org问题在于text
是一个字符串(通常通过file.read
)而不是字典,所以你不能只做text['name']
@JonathanM我不认为问题是你的观点。我已经更新了问题的最后一部分。@hlt那我该怎么办?@ehsanshirzadi,你永远不会将json字符串转换为对象。更正json后使用json.load
。Python中的对象标记方式不同于JSON中的对象标记方式。