如何从json文本Python中获取值

2024-05-16 00:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

import requests
import json
r = requests.get("https://api.investing.com/api/search/?t=Equities&q=amd") # i get json text from this api
data = json.loads(r.text)
if data['articles'][0]['exchange'] == 'Sydney': # the error is here      KeyError: 'exchange'
   print('success')
else:
   print('fail')
 

如果我想通过检查“交换”是否为存储在json文本这一部分中的“Sydney”来获取url“/equities/segue resources ltd”,“description”:“segue resources ltd”,“symbol”:“AMD”,“exchange”:“Sydney”,“flag”:“AU”,“type”:“equities”}


Tags: texthttpsimportapijsondatagetexchange
2条回答

如果我理解正确,exchange标识符只出现在json响应的一部分。因此,为了使用问题中相同的data变量获得结果,我们可以这样做:

result = [val["url"] for val in data["quotes"] if val["exchange"] == "Sydney"]

我们在这里使用列表理解,循环只经过data["quotes"]而不是整个json响应,对于该json子集中的每个项,我们将返回key == "url"的值,其中exchange == "Sydney"。运行上面的行应该会让您:

['/equities/segue-resources-ltd']

正如所料。如果您对列表理解感到不舒服,则更传统的循环版本如下所示:

result = []
for val in data["quotes"]:
    if val["exchange"] == "Sydney":
        result.append(val["url"])

print(result)

KeyError: 'exchange'表示字典data['articles'][0]没有键'exchange'

根据您的用例,您可能希望迭代整个文章列表:

for article in data['articles']:
    if 'exchange' in article and article['exchange'] == 'Sydney':
        ...  # Your code here

如果您只想查看第一篇文章,请使用data['articles'][0].get('exchange')。如果键不存在,^{}方法将返回None,而不是抛出KeyError

相关问题 更多 >