#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