我正在使用Guardian的API来获取JSON数据,现在我想要一个来自JSON数据条目的特定元素。我该怎么做?
我正在进行以下GET请求
url = 'http://content.guardianapis.com/search?from-date=2016-01-02&to-date=2016-01-02&order-by=newest&show-fields=all&page-size=1&api-key=API-KEY.
现在我想从JSON数据中获取webTitle。所以我这样做:
response = requests.get(url)
response = response.content
response = json.loads(response)
content = response['response']['results']['webTitle']
但我收到TypeError: string indices must be integers, not str
错误。
但是,content = response['response']['results']
正常工作。
答案 0 :(得分:1)
response = request.get(url).json()
content = response['response']['results'][index]['webTitle']
是的,因为Sudheesh Singanamalla建议,结果是一个列表,您必须访问给定的索引才能获得相应的webTitle
答案 1 :(得分:1)
当我们将列表误认为字典时,我们会收到此错误。似乎'结果'实际上是一个以字典作为第一项的列表。请执行以下操作。
content = response['response']['results'][0]['webTitle']
显然我假设你在'结果'中有一个项目。仅限列表。如果它有多个项目,则遍历列表。
答案 2 :(得分:1)
response['response']['results']
为您提供了词典列表。 [{},{},...]
其中每个字典在您的示例中包含以下内容:
{id:'', type:'', sectionid:'', .... }
如果您想要结果中所有webTitle
的列表,则必须迭代从response['response']['results']
获取的列表,并选择webTitle
或其中任何其他必需的密钥结果字典。这是一个例子
webTitleList = []
# Make the request for the JSON
results = response['response']['results']
for result in results:
webTitleList.append(result['webTitle'])
# Now the webTitleList contains the list of all the webTitles in the returned json
但是,您还可以使用webTitle
上的列表理解来简化results
的选择。 StackOverflow上有很多例子。
答案 3 :(得分:0)
results
是一个列表。迭代它以获取所需的值。
<强>实施例强>
for i in response['response']['results']:
print(i['webTitle'])