Python выдает ошибку с ключевым словом, когда я пытаюсь получить метаданные json с веб-сайта

#python #json #urllib

Вопрос:

Я хочу повторить и извлечь часть метаданных json, приведенный ниже код выдает ошибку ключевого слова трассировки: «метаданные», когда я запускаю приведенный ниже код. Я не знаю, вызвана ли ошибка функцией printResults или это только из-за ключевого слова или аргумента «метаданные».

 import urllib.request
import json

def printResult(data):
    theJSON = json.loads(data)
    
    if "title" in theJSON["metadata"]:
        print(theJSON["metadata"]["title"])
        
    count = theJSON ["metadata"]["count"]
    print(str(count)  "events recorded")

def main():   
    webUrldata = (
     
         "https://www.sciencebase.gov/catalog/item/5d88ea50e4b0c4f70d0ab3c0?format=json")
    webUrl = urllib.request.urlopen(webUrldata)
    print('Get request:'  str(webUrl.getcode()))
    
    if (webUrl.getcode() == 200):
        data = webUrl.read()
        printResult(data)
    else:
        print("recieved error")

if __name__ == "__main__":
    main()
 

ошибка

 et request:200
Traceback (most recent call last):
  File /xample 3.py", line 27, in <module>
    main()
  File "/xample 3.py", line 22, in main
    printResult(data)
  File "/xample 3.py", line 7, in printResult
    if "title" in theJSON["metadata"]:
KeyError: 'metadata'
 

Комментарии:

1. Вы смотрели на theJSON это ? Есть ли у него поле "metadata" ?

2. На самом деле это не так, и именно это означает ошибку. Более того, если вы хотите избежать ошибок, используйте theJSON.get('metadata',{}) , в то время как последний параметр является резервным вариантом на случай, если ключ не будет найден

Ответ №1:

Нет никаких метаданных

 theJSON= json.loads(data).get("metadata")
print(theJSON)
 

дает —

 None
 

amp;

 theJSONkeys = json.loads(data).keys()
print(theJSONkeys)
 

дает

 link
relatedItems
id
identifiers
title
summary
body
citation
purpose
provenance
maintenanceUpdateFrequency
hasChildren
parentId
contacts
webLinks
systemTypes
tags
dates
spatial
files
distributionLinks
previewImage