json - 尝试检查并计算从 API 返回的 JSON
问题描述
我正在学习如何使用 Python 3 从特定API获取 JSON 数据。我正在使用 input() 选择要包含在 url 搜索字符串中的单词。我通常会得到我期望的 JSON 结果,其中包括返回的记录数。但是对于某些搜索词,JSON 会按预期返回,但会调用 except 并且不计算记录。我认为问题与尝试和例外有关。在我的代码中,按预期工作的输入词包括“pool”和“Pool”,结果包括“pool”和“Pool”,但“captain”或“Captain”没有给出最终计数,即使有记录“Captain”,并返回 JSON。
我的代码在下面,还有一个 json 示例。对于这方面的任何帮助,我将不胜感激:
import urllib.request, urllib.parse
import json
what = input('What?: ')
what = what.strip()
url = 'http://collections.anmm.gov.au/advancedsearch/objects/'+'title:'+ what +'/'+'json'
#print ('Retrieving: ', url)
connection = urllib.request.urlopen(url)
data = connection.read().decode()
try:
results = json.loads(data)
#print (results)
print ('Retrieving: ', url)
count = 0
if results['objects']:
for item in results['objects']:
objectNumber = item['invno']['value'];
title = item['title']['value'];
date = item['displayDate']['value'];
count = count +1
print(objectNumber,'',title,'',date)
print(count, 'records with ',what,' returned')
except:
print('No search results returned')
还有我的 json 样本:
{
"objects":[
{
"displayDate":{
"label":"Date",
"value":1930,
"order":3
},
"invno":{
"label":"Object No",
"value":"ANMS0427[063]",
"order":9
},
"id":{
"label":"Id",
"value":88089,
"order":0
},
"title":{
"label":"Title",
"value":"Article by Donald McLean titled 'Lure of buried treasure; from Carolina to Cocos' about pirates: Captain blackbeard, Captain Kidd and Captain Edward Davis",
"order":2
}
}
]
}
解决方案
如果你调试你的代码,你会发现这条指令的输出有问题:
date = item['displayDate']['value'];
推荐阅读
- python - 如何在sklearn中获得预测区间而不是点估计以进行回归
- html - 如何使div右上角裁剪
- react-native - 当用户在 react-native 中按下图表时如何突出显示条形图
- git - 我们如何在本地和远程恢复 git 存储库以前的分支?
- c# - 无法从 ViewComponent 中解析缓存服务
- java - 如何安排 crontrigger 在一周中的某些日子运行?
- node.js - Web3.js 查看方法 call() 错误,因为返回值无效,是否耗尽了气体
- azure-devops - 发布管道 - 手动状态覆盖
- c# - HanaDecimal 没有可序列化的属性
- c++ - 使用对象内的大量数据容器进行更有效的对象交换