首页 > 解决方案 > Python:Json.load 给出列表并且无法从中解析数据

问题描述

我有一个 data.json 文件,如下所示:

["{\"Day\":\"Today\",\"Event\":\"1\", \"Date\":\"2019-03-20\"}"]

我正在尝试使用 python 从该文件中获取“事件”,但在这方面失败了。

with open('data.json', 'r') as json_file:
    data = json.load(json_file)
    print (data['Event'])

我收到以下错误:

TypeError:列表索引必须是整数或切片,而不是 str

即使我尝试

print (data[0]['Event'])

然后我得到这个错误:

TypeError:字符串索引必须是整数

还有一件事:

print(type(data))

给我“清单”

我已经搜索了所有内容,但没有找到解决此问题的方法。我非常感谢您的建议。

标签: pythonjsonpython-3.xparsing

解决方案


您可以为此使用该ast模块:

import ast

mydata = ["{\"Day\":\"Today\",\"Event\":\"1\", \"Date\":\"2019-03-20\"}"]
data = ast.literal_eval(mydata[0])
data
{'Day': 'Today', 'Event': '1', 'Date': '2019-03-20'}

data['Event']
'1'

编辑

您的原始代码确实将数据加载到列表结构中,但在该列表中仅包含一个字符串条目,尽管 json 语法正确。ast, 就像json, 会将那个字符串条目解析成一个 python 数据结构, dict.

就目前而言,当您尝试索引该列表时,它与调用字典中的键不同,因此slices cannot be str

alist = [{'a':1, 'b':2, 'c':3}]
alist['a']
TypeError

# need to grab the dict entry from the list
adict = alist[0]
adict['a']
1

推荐阅读