python - 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))
给我“清单”
我已经搜索了所有内容,但没有找到解决此问题的方法。我非常感谢您的建议。
解决方案
您可以为此使用该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
推荐阅读
- html - 如何仅使用css模糊除目标上的div以外的整个身体?
- c# - 无法在 PropertyInfo 中使用 Array.IndexOf
- docker - Iron.io set up getting 404 Not Found on `iron register` step
- yii2 - SyntaxError: 预期的表达式,得到 '<' main.js yii2
- c++ - 在 C++ 中扩展多模式可变参数模板
- c# - C# Tuple - How to search for questions based on input from text box
- azure-data-factory - Epoch timestamp in Data factory
- reactjs - 将 React 应用程序嵌入到其他 React 应用程序
- php - Get latest transaction details from loanhist
- regex - html - 输入标签限制为字母和数字