我已經開發了一個小型庫,並有興趣使用戶更容易從返回的JSON列表/字典中檢索數據。我創建了使用請求來處理呼叫的函數。現在假設我調用這個函數,並傳遞一些參數:JSON列表/字典解析從API
precip = precipitation_obs(stid='kfnl', start='201504261800', end='201504271200', units='precip|in')
這將返回以下JSON:
{ 'STATION': [ { 'ELEVATION': '5016',
'ID': '192',
'LATITUDE': '40.45',
'LONGITUDE': '-105.01667',
'MNET_ID': '1',
'NAME': 'Fort Collins/Loveland, Fort Collins-Loveland '
'Municipal Airport',
'OBSERVATIONS': { 'count_1': 6,
'ob_end_time_1': '2015-04-27T00:55:00Z',
'ob_start_time_1': '2015-04-26T18:55:00Z',
'total_precip_value_1': 0.13,
'vids case4': ['39', '51', '40', '52']},
'STATE': 'CO',
'STATUS': 'ACTIVE',
'STID': 'KFNL',
'TIMEZONE': 'US/Mountain'}],
'SUMMARY': { 'METADATA_RESPONSE_TIME': '5.22613525391 ms',
'NUMBER_OF_OBJECTS': 1,
'RESPONSE_CODE': 1,
'RESPONSE_MESSAGE': 'OK',
'TOTAL_TIME': '57.6429367065 ms'}}
現在,我希望用戶能夠只通過字典向下鑽取,但站是一個列表,並要求我做到以下幾點:
output = precip['STATION'][0]['OBSERVATIONS']['ob_start_time_1']
print(output)
# returns 2015-04-26T18:55:00Z
,我必須包括[0],以避免:
TypeError: list indices must be integers, not str
反正有嗎?在那裏加入[0]確實讓事情變得可笑。或者甚至每次都必須指定['STATION']有點麻煩。我應該使用simpleJSON模塊來幫忙嗎?任何提示,使這一點更容易會很好,謝謝!
如果這是您的API,爲什麼不簡化輸出呢?是否只有一個站,然後不使用列表。如果訪問站點元素很常見,並且只有一個站點,則不要使用嵌套結構,而要將所有鍵移到頂層對象等。 –
沒有'simplejson'在這裏不會有幫助,因爲它只是將JSON解析爲相應的Python結構。 –
反過來說,如果_can_可以超過一個站,你就不能擺脫'[0]'步驟,因爲如果有3個站,你需要能夠訪問#0,#1和# 2。你可以把這個列表變成一個由每個電臺的'STID'值(例如,'precipitation'''STATION'] ['KFNL'] ['OBSERVATIONS'['ob_start_time_1''''') ,但你無法擺脫它。 – abarnert