Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文本文件检索的json格式的数据不能通过键名读取_Python_Json_Dictionary - Fatal编程技术网

Python 从文本文件检索的json格式的数据不能通过键名读取

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

我有一个文本文件,其中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 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中的对象标记方式。