2017-09-21 146 views
-1

我使用OpenWeatherMap API構建了一個鬆散機器人功能,用戶可以在其中輸入城市的名稱,並且將顯示當前的天氣預報。使用python解析json文件

但API使用唯一的城市ID來匹配相應的城市名稱,這是json對象。

JSON文件的某些行像這個 -

[ 
    { 
    "id": 707860, 
    "name": "Hurzuf", 
    "country": "UA", 
    "coord": { 
     "lon": 34.283333, 
     "lat": 44.549999 
    } 
    }, 
    { 
    "id": 519188, 
    "name": "Novinki", 
    "country": "RU", 
    "coord": { 
     "lon": 37.666668, 
     "lat": 55.683334 
    } 
    }, 
] 

我想通過JSON文件搜索和匹配正確的城市名稱,用其相應的城市ID用戶輸入的城市名稱一致,獲取相應的城市ID,該API將按照API要求處理的API調用發送。

如何在Python中實現這個東西?

回答

0

嘗試,如果這有助於:

jsonobject = [ 
    { 
    "id": 707860, 
    "name": "Hurzuf", 
    "country": "UA", 
    "coord": { 
     "lon": 34.283333, 
     "lat": 44.549999 
    } 
    }, 
    { 
    "id": 519188, 
    "name": "Novinki", 
    "country": "RU", 
    "coord": { 
     "lon": 37.666668, 
     "lat": 55.683334 
    } 
    }, 
] 

for elem in jsonobject: 
    print (elem['id']) 

輸出:

707860 
519188 
+0

查看json文件包含數千個與這兩個相似的對象,因此遍歷整個文件來搜索,比方說,最後一個對象將非常耗時且效率低下。沒有一個有效的或更好的方法來做到這一點? –

+0

我不確定是否有任何其他方式無法迭代所有'id'。但我想我的答案指出了從你的問題提取id從json對象的方法。如果有人有更好的解決方案,我們可以等待。 –

+0

如果我把它命名爲jsonobject = [...],那麼它顯示錯誤在第1行解析錯誤: jsonobject = [{0} {0} {0} { 期待'STRING','NUMBER','NULL','TRUE','FALSE ','{','[','undefined' –

0

這裏是我的版本的解決方案:

city_name = 'Novinki' 

for city in jsonobject: 
    if city['name'] == city_name: 
     print(city['id']) 

我相信你已經在你的榜樣詞典不是json(可能你已經解析過它)。