首页 > 解决方案 > 尝试检查并计算从 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
         }
      }
   ]
}

标签: jsonpython-3.x

解决方案


如果你调试你的代码,你会发现这条指令的输出有问题:

date = item['displayDate']['value'];


推荐阅读