Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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';s json:AttributeError:';str';对象没有属性';钥匙';_Python_Json_Python 3.x_Dictionary - Fatal编程技术网

python';s json:AttributeError:';str';对象没有属性';钥匙';

python';s json:AttributeError:';str';对象没有属性';钥匙';,python,json,python-3.x,dictionary,Python,Json,Python 3.x,Dictionary,我试图加载一个字符串(实际程序从一个文件中读取这一行,它是一个非常大的文件,我无法手动修改),格式化为字典 我需要将字符串行转换为json对象,以便检查特定键的值,例如myJson[Date] 以下是脚本: import json mystring = "{'Date': 'Fri, 19 Apr 2019 03:58:04 GMT', 'Server': 'Apache/2.4.39', 'Accept-Ranges': 'bytes'}" mystring = json.dumps(m

我试图加载一个字符串(实际程序从一个文件中读取这一行,它是一个非常大的文件,我无法手动修改),格式化为字典

我需要将字符串行转换为json对象,以便检查特定键的值,例如
myJson[Date]

以下是脚本:

import json

mystring = "{'Date': 'Fri, 19 Apr 2019 03:58:04 GMT', 'Server': 'Apache/2.4.39', 'Accept-Ranges': 'bytes'}"


mystring = json.dumps(mystring)
myJson = json.loads(mystring)

print(str(myJson.keys()))
print(str(myJson))
我得到这个错误:

AttributeError: 'str' object has no attribute 'keys'

我怀疑
mystring
格式不一致,单引号应该是双引号?鉴于我有大量数据,我不能简单地使用简单搜索/替换将单冒号替换为双冒号,因为单冒号可能包含在我不应修改的值中。如果这是问题的原因,有没有办法只替换键/值对的冒号而不触及值中的冒号?我希望这不是问题所在

与其处理单引号字符串并努力将其转换为json,不如使用package将其转换为有效的dict

import ast

mystring = "{'Date': 'Fri, 19 Apr 2019 03:58:04 GMT', 'Server': 'Apache/2.4.39', 'Accept-Ranges': 'bytes'}"

my_dict = ast.literal_eval(mystring)
结果是:

> print(my_dict["Date"])
Fri, 19 Apr 2019 03:58:04 GMT


是的,json解码器喜欢对键和值使用双引号,我认为您可以使用python进行替换,如果适用,请尝试:

mystring = "{'Date': 'Fri, 19 Apr 2019 03:58:04 GMT', 'Server': 'Apache/2.4.39', 'Accept-Ranges': 'bytes'}"
json_string = mystring.replace("'", "\"")
d = json.loads(json_string)

dstring = json.dumps(d)
myJson = json.loads(dstring)

print(str(myJson.keys()))

此代码将字符串作为字典存储在名为“Tempvar”的变量中 从这个变量中,您可以像使用常规字典一样使用键

import json

mystring = "{'Date': 'Fri, 19 Apr 2019 03:58:04 GMT', 'Server': 'Apache/2.4.39', 'Accept-Ranges': 'bytes'}"

exec("tempvar = " + mystring)
mystring = json.dumps(mystring)
myJson = json.loads(mystring)

print(str(tempvar['Date']))
print(str(myJson))

希望这有帮助

这行代码的作用是什么:
mystring=json.dumps(mystring)
?此外,您的字符串不是有效的JSON(单引号而不是双引号)。
mystring
从何而来?看起来你把一个非常好的dict转换成了一个字符串。正确的操作过程很可能不是添加更多的处理步骤,而是删除一个较早的、不正确的步骤。如果您真的被这个字符串卡住了,您可能必须使用类似于
ast.literal\u eval
或允许的JSON解析器
json。dumps
绝对不是正确解决方案的一部分。
mystring
一开始就不是有效的json-它需要双引号才能成为json。您已将Python
str
对象序列化为json字符串对象。因此,当您反序列化它时,它将是一个字符串。正如其他人所指出的,您的字符串实际上并不包含有效的JSON,但在任何情况下,您几乎肯定不是想先
JSON.dumps(mystring)
。这没有任何意义。您确定
mystring.replace
将只替换键/值逗号吗?值中没有任何其他逗号?replace命令将单引号替换为双引号,而不是逗号。您只能打印replace命令的结果,以查看其工作方式是的,我指的是引号。那是个打字错误。但正如我所说,值中的数据可能包含双引号。盲目地替换报价是危险的。除非有一种方法可以保证只有键/值引号被替换。哦,我明白你的担心。。。在这种特殊情况下,ast.literal_eval是一个更实用的解决方案。我的意思是,在值内部,有可能保留单引号。示例:
“日期”:“2019年4月19日星期五03:58:04 GMT”
。我不应该更改19中的引号。或者可能会有双引号,例如:
“Date”:“Fri”,19“Apr 2019 03:58:04 GMT”
,如果我将单引号转换为双引号,我不知道是否会导致问题?