Извлечение определенного значения во вложенном JSON с помощью python

#python #json

#python #json

Вопрос:

Я использую [wikipedia API][1] , который возвращает следующий JSON для страницы Президентские выборы в США 2016 года

Что я пытаюсь сделать, так это получить значение под ключом extract . Трудность, с которой я сталкиваюсь, заключается в том, что значение страницы (в этом примере as 21377251 ) изменяется для каждой страницы. В настоящее время у меня есть функция, как показано ниже.

Функция

 def fetchSummary(self, title):
    url = ("https://en.wikipedia.org/w/api.php?format=jsonamp;origin=*amp;action=queryamp;prop=extractsamp;explaintext=falseamp;exintroamp;titles=" title)
    print(url)
    response = requests.get(url)

    data = response.json()
    print(data['query'].['pages'])


    return()
  

Вывод JSON из ссылки

 {
    'batchcomplete': '',
    'query': {
        'pages': {
            '21377251': {
                'pageid': 21377251,
                'ns': 0,
                'title': '2016 United States presidential election',
                'extract': 'The 2016 United States presidential election was the 58th quadrennial presidential election, ....Russian government".'
            }
        }
    }
}
  

Ответ №1:

Если каждый раз есть только один ключ, вы можете просто извлечь номер страницы следующим образом:

 page = list(data['query']['pages'])[0]
print(data['query']['pages'][page]['extract'])

  

Если их несколько, вы можете просто получить список с помощью keys(), а затем выполнить их цикл следующим образом:

 pages = list(data['query']['pages'].keys())
for page in pages:
    print(data['query']['pages'][page]['extract'])
    
  

Ответ №2:

Как только у вас будет JSON, вы можете извлечь номер страницы, а затем использовать его для дальнейшего поиска и извлечения извлечения.

 def fetchSummary(self, title):
    url = (
        "https://en.wikipedia.org/w/api.php?format=jsonamp;origin=*amp;action=queryamp;"
        "prop=extractsamp;explaintext=falseamp;exintroamp;titles="
          title
    )
    print(url)
    response = requests.get(url)

    data = response.json()
    pg = list(data['query']['pages'])[0]
    extract = data['query']['pages'][pg]['extract']
    return extract
  

Ответ №3:

Если это всегда одна страница:

 list(data["query"]["pages"].values())[0]["extract"]
  

Если он может содержать несколько страниц:

 for val in data["query"]["pages"].values():
    print(val["extract"])