我正在尝试加载json文件并遍历字典以获取我选择的键值,之后,我将使用pandas数据框将这些值保存在excel表中。但是当我运行加载文档时,出现错误
TypeError: list indices must be integers or slices, not str
下面是我要实现的全部代码,
import json
import pandas as pd
import requests
URLs = ['http://httpbin.org/ip',
'http://httpbin.org/user-agent',
'http://httpbin.org/headers']
json_list = []
for url in URLs:
data = requests.get(url)
resolvedwo = data.json()
json_list.append(resolvedwo)
with open('resolvedworesolution.json', 'w+') as f:
json.dump(json_list, f, sort_keys=True, indent = 4)
with open('C:\\Users\\resolvedworesolution.json', encoding='utf-8') as f:
data = json.load(f)
columns = ['Title', 'Status']
df_ = pd.DataFrame(columns=columns)
for ib in data['documents']:
tit = ib['title']
stat = ib['status']
print(tit, stat)
df_ = df_.append(pd.Series([tit, stat], index=df_.columns), ignore_index=True)
df_.to_excel('C:\\Users\\resolved_wo_resolution.xls', index=False)
注意:上面提到的URL仅作为示例。我使用的URL是内部的,因此无法在此处共享。因此,URL将返回如下所示的JSON数据。
已编辑json:
[
{
"documents": [
{
"title": [Sample Title 1],
"status": [true]
},
{
"title": [Sample Title 2],
"status": [false]
}
]
}
]
[
{
"documents": [
{
"title": [Sample Title 1],
"status": [true]
},
{
"title": [Sample Title 2],
"status": [false]
}
]
}
]
[
{
"documents": [
{
"title": [Sample Title 1],
"status": [true]
},
{
"title": [Sample Title 2],
"status": [false]
}
]
}
]
答案 0 :(得分:1)
问题的出处在这里
for ib in data['documents']:
您的数据是一个列表。因此,您不能使用字符串作为索引。
您有一些选择。如果您知道列表始终是一个条目(它将中断为0个条目),或者您只关心第一个条目
for ib in data[0]['documents']:
# etc...
如果要处理所有条目,请使用循环
for d in data:
for ib in d['documents']:
# etc...
遇到此类错误时,请发布完整的追溯错误。如果没有这些信息,我们需要自己运行代码,这将花费更长的时间。
例如
Traceback (most recent call last):
File "pdcrash4.py", line 21, in <module>
for ib in data['documents']:
TypeError: list indices must be integers or slices, not str