我正在尝试加载格式化为字典的字符串(实际程序从文件中读取此行,并且这是一个我无法手动修改的非常大的文件)。
我需要将字符串行转换为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
格式不符合要求,单引号应该是双引号吗?鉴于我拥有大量数据,我不能使用简单的搜索/替换简单地用双冒号替换单个冒号,因为单个冒号可能包含在我不应该修改的值中。如果这是导致问题的原因,是否有任何方法可以仅替换键/值对中的冒号而不触摸值中的冒号?我希望这不是问题。
答案 0 :(得分:1)
使用ast包将其转换为有效的字典,而不是处理单引号字符串并努力将其转换为json。
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
答案 1 :(得分:0)
此代码将字符串作为字典存储在名为“ 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))
希望这会有所帮助
答案 2 :(得分:-1)
是的,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()))