无法访问 Python 的请求响应中嵌套的 JSON 元素

Unable to access nested JSON elements in Python's request reponse

我一直在尝试调用 API GET 请求以从在线 SIM 卡提供商处获取国家/地区列表。我正在尝试获取所有国家/地区的列表并从中访问某些元素。

请求结果如:

{
   "afghanistan": {
      "iso": {
         "af": 1
      },
      "prefix": {
         "+93": 1
      },
      "text_en": "Afghanistan",
      "text_ru": "Афганистан",
      [...]
   "albania": {
      [...]
}

我的问题是我无法找到循环遍历数组(阿富汗、阿尔巴尼亚、[...])和访问 text_en 键的正确方法。

根据我在网上找到的例子/人们的问题,在我尝试过的所有方法中,这是(不起作用)我认为应该起作用的方法:

countries = requests.get("(api_link)").json()

for country in countries:
    print(country['text_en'])

给我以下错误:TypeError: string indices must be integers

因为我的数组没有像我在网上找到的大多数例子那样命名(数组的根被命名为例如 list 并且代码看起来像:

for country in countries['list']:
    print(country['list']['text_en'])

为什么我不能像第一个例子那样做?我想到的是我的 JSON 没有正确加载(因此 TypeError: string indices must be integers),我在数组上循环的方式(对于 X 中的 i 或使用 JSON 函数?)或者可能是因为上面提到的“问题”(没有“根”数组名称)?

countries 是字典。 for country in countries 因此循环遍历字典中的键,如果您尝试 country['text_en'],您试图用另一个字符串索引第一个键(字符串),这是行不通的。

类似 countries['afghanistan']['text_en'] 的计算结果为 'Afghanistan'

要打印所有这些:

for key, data in countries.items():
    print(key, data['text_en'])

这是有效的,因为它遍历项目,从字典中产生键和值的元组。

另一种方法,更接近您的预期:

for key in countries:
    print(key, countries[key]['text_en'])

这可能效率有点低,因为您需要一次使用其键查找每个元素,而第一个循环按顺序访问所有元素,但可读的代码也很有价值 - 在最起码,也许它有助于了解字典的工作原理。