Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从JSON中查找值_Python_Json - Fatal编程技术网

Python 从JSON中查找值

Python 从JSON中查找值,python,json,Python,Json,首先,我为标题感到抱歉,我不知道如何具体说明我的问题 好的,我正在做一些关于传奇联盟API的事情。数据显示为Json,可以找到它,我想做的是循环遍历它。我有来自另一个脚本的数据,该脚本显示比赛中每个球员的统计数据。在这些统计数据中,有一个与正在比赛的冠军相同的id。我想使用该Id并与上面json文件中的每个键进行比较,如果它找到匹配的key-Id,我就可以得到冠军的名字。我的问题是,我不知道如何准确地遍历它们中的每一个,因为正如您在文件中看到的那样,因为我无法正确获取缩进,所以发布了一个图像 我

首先,我为标题感到抱歉,我不知道如何具体说明我的问题

好的,我正在做一些关于传奇联盟API的事情。数据显示为Json,可以找到它,我想做的是循环遍历它。我有来自另一个脚本的数据,该脚本显示比赛中每个球员的统计数据。在这些统计数据中,有一个与正在比赛的冠军相同的id。我想使用该Id并与上面json文件中的每个键进行比较,如果它找到匹配的key-Id,我就可以得到冠军的名字。我的问题是,我不知道如何准确地遍历它们中的每一个,因为正如您在文件中看到的那样,因为我无法正确获取缩进,所以发布了一个图像

我如何访问每一个的Id?因为,正如您所看到的,每一个都有不同的名称(Jax、Sona、Tristana等)。我只需要每个名称的键和名称。我尝试使用For循环,但甚至无法列出第一个,所以这次我很迷茫。谢谢您的帮助:)

代码:

champ_r = requests.get("https://global.api.pvp.net/api/lol/static-data/lan/v1.2/champion?"
                           "api_key=").json()


for x in champ_r['data'][0]:
    pprint(x['id'])
如果我这样运行它,我会得到一个
KeyError:0
,如果我删除它,我会得到
TypeError:string索引必须是整数

作为一个输出,我希望它返回每个冠军的ID和名字。比如:

Aatrox - Key
Ahri - Key...

。。。等等。

您得到的错误是因为
champ\u r['data']
中没有0元素。这是一本由冠军名字组成的字典。因此,获得冠军的钥匙应该像champ_r['data']['Ahri']['key']那样进行。您需要知道的另一件事是,在字典中循环得到的是键,而不是值,因此循环应该如下所示:

for champ_name in champ_r['data']:
    print (champ_name)
    pprint(champ_r['data'][champ_name])

您得到的错误是因为
champ\u r['data']
中没有0元素。这是一本由冠军名字组成的字典。因此,获得冠军的钥匙应该像champ_r['data']['Ahri']['key']那样进行。您需要知道的另一件事是,在字典中循环得到的是键,而不是值,因此循环应该如下所示:

for champ_name in champ_r['data']:
    print (champ_name)
    pprint(champ_r['data'][champ_name])

您可以尝试这一行:
result={value['key']:value['name']表示键,value in champ_r['data'].items()

您可以尝试这一行:
result={value['key']:value['name']表示键,value in champ_r['data']表示值。items()

基于您试图获得的示例输出,“key”字典的名称实际上是要查找的名称,与该键关联的值是字典。你在那本字典里找“键”。因此,当您在字典上迭代时,您的值实际上是一个字典。通过在迭代中使用items方法,可以简化迭代

此外,所有数据都存储在大json响应的“data”键中。因此,您的代码应该如下所示:

for key, value in champ_r['data'].items():
    print(key, value['key'])
前几行的示例输出:

Sona 37
Draven 119
FiddleSticks 9
Volibear 106
Pantheon 80
Singed 27
Vladimir 8
Ekko 245

根据您试图获得的示例输出,字典的“键”实际上就是您要查找的名称,与该键关联的值就是字典。你在那本字典里找“键”。因此,当您在字典上迭代时,您的值实际上是一个字典。通过在迭代中使用items方法,可以简化迭代

此外,所有数据都存储在大json响应的“data”键中。因此,您的代码应该如下所示:

for key, value in champ_r['data'].items():
    print(key, value['key'])
前几行的示例输出:

Sona 37
Draven 119
FiddleSticks 9
Volibear 106
Pantheon 80
Singed 27
Vladimir 8
Ekko 245

显示您的代码。用一个更实际的例子解释预期的输出是什么。@idjaw对不起,我认为在这个问题上代码不是必须的。我更新了。显示你的代码。用一个更实际的例子解释预期的输出是什么。@idjaw对不起,我认为在这个问题上代码不是必须的。我更新了它。啊,这就成功了,我不知道这个方法。非常感谢:)我不得不使用另一个json文件,因为第一个文件显示了我的api密钥。啊,就是这样,我不知道这个方法。非常感谢:)我不得不使用另一个json文件,因为第一个文件显示了我的api密钥。