Как правильно разобрать json? - PullRequest
1 голос
/ 28 мая 2020
from urllib.request import urlopen
import json

def downloadPage(url):
    webpage = urlopen(url).readlines()
    return webpage

json_string = downloadPage('https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=The%20Terminator')

str1 = ''.join(map(bytes.decode, json_string))

parsed_json = json.loads(str1)

print(parsed_json)

Похоже, что json не разбирается должным образом, и когда я это делаю

print(parsed_json['extract'])

, я получаю

Traceback (most recent call last):
  File "D:/Universitet/PythonProjects/myapp.py", line 14, in <module>
    print(parsed_json['extract'])
KeyError: 'extract'

Как я могу заставить его работать, чтобы он извлекал json хочу с

print(parsed_json['extract'])

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Если это ваш объект JSON, вам нужно пройти весь объект, чтобы добраться до значения, которое вы хотите извлечь.

{
   "batchcomplete":"",
   "query":{
      "pages":{
         "30327":{
            "pageid":30327,
            "ns":0,
            "title":"The Terminator",
            "extract":"The Terminator is a 1984 American science fiction film directed by James Cameron. It stars Arnold Schwarzenegger as the Terminator, a cyborg assassin sent back in time from 2029 to 1984 to kill Sarah Connor (Linda Hamilton), whose son will one day become a savior against machines in a post-apocalyptic future. Michael Biehn plays Kyle Reese, a  reverent soldier sent back in time to protect Sarah. The screenplay is credited to Cameron and producer Gale Anne Hurd, while co-writer William Wisher Jr. received a credit for additional dialogue. Executive producers John Daly and Derek Gibson of Hemdale Film Corporation were instrumental in financing and production.The Terminator topped the United States box office for two weeks and helped launch Cameron's film career and solidify Schwarzenegger's status as a leading man. Its success led to a franchise consisting of several sequels, a television series, comic books, novels and video games. In 2008, The Terminator was selected by the Library of Congress for preservation in the National Film Registry as \"culturally, historically, or aesthetically significant\"."
         }
      }
   }
}

Что-то вроде:

result = json["query"]["pages"]["30327"]["extract"]

Но, конечно, вы должны искать свойство надлежащим образом, перебирая свойства / массивы и проверяя, существуют ли ключи.

EDIT

Если вы знаете, что структура всегда одна и та же, но идентификатор отличается, тогда вы можете попробовать что-то вроде этого для обработки произвольных идентификаторов.

for key, value in d["query"]["pages"].items():
   result = value["extract"]
   print(result)
1 голос
/ 28 мая 2020

JSON файл имеет уровни, поэтому, если вы хотите получить некоторые значения, вы должны получить их через цепочки ключей:

parsed_json['query']['pages']['30327']['extract']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...