python 的 json: AttributeError: 'str' object has no attribute 'keys'

新手上路,请多包涵

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

我需要将字符串行转换为 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 格式不符合,单引号应该是双引号?鉴于我有大量数据,我不能简单地使用简单的搜索/替换将单冒号替换为双冒号,因为单冒号可能包含在我不应该修改的值中。如果这是问题的原因,有没有办法只替换键/值对的冒号而不触及值中的冒号?我希望这不是问题所在。

原文由 user9371654 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

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

 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

原文由 razdi 发布,翻译遵循 CC BY-SA 4.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))

希望这可以帮助

原文由 I don‘t exist 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题