2017-10-09 68 views
0

我已經開發出具有請求模塊POST請求和我檢索JSON,這是代碼Python的讀JSON響應和追加

headers_ = {'Authorization': acc_token} 
    params_ = (('start_time', '2016-08-01T00:00:00+00:00'),('limit', '2')) 

    r = requests.get('https://server.com/API/v1', headers=headers_, params=params_) 
    data_ = r.json() 
    json_result = (json.dumps(data_, indent=4, sort_keys=False)) 

,這是JSON結果

{ 
"loc":[ 
    { 
    "origin":{ 
     "lat":39.72417, 
     "lng":-104.99984, 
     "eta_seconds":null, 
     "address":"" 
    }, 
    "destination":{ 
     "lat":39.77446, 
     "lng":-104.9379, 
     "eta_seconds":null, 
     "address":null 
    } 
    }, 
    { 
    "origin":{ 
     "lat":39.77481, 
     "lng":-104.93618, 
     "eta_seconds":null, 
     "address":"10 Albion Street" 
    }, 
    "destination":{ 
     "lat":39.6984, 
     "lng":-104.9652, 
     "eta_seconds":null, 
     "address":null 
    } 
    } 

] } 現在我試圖在數組中追加每個json條目數組的lat和lng值,並且我嘗試使用此代碼

for i in json_result: 
     print(i['loc']['origin']['lat']) 
     dict.append(i['loc']['origin']['lat']) 

,但我有這個錯誤 類型錯誤:字符串索引必須是整數,而不是str的

我怎樣才能檢索到緯度值和LNG爲數組中的每個元素和追加到字典?

感謝

+1

它不應該是'我[ 'LOC'] [1] [ '原點'] [ 'LAT']'。由於'loc'包含一個字典列表。 – kstullich

+0

我收到相同的錯誤 – APPGIS

+0

當我把你的JSON結果放到一個變量中並執行print(data [「loc」] [1] [「origin」] [「lat」])時,我得到所需的輸出。 – kstullich

回答

2

json_result是一個字符串,因爲它是json.dumps()結果。

你根本不需要這個。刪除整條生產線,並直接在data_上操作。

(作爲一個風格問題,請停止添加那些無謂的尾隨下劃線。)

+0

我試過但錯誤是一樣的:TypeError:字符串索引必須是整數 – APPGIS

2

所以,問題是這樣的for i in json_result,將每個keys的回報你在你的json。你可以簡單地做:

for entry in json_result.get('loc'): 
    do stuff here.... 
0

只是不同的解決方案,如果你仍然得到錯誤,那麼你也可以嘗試正則表達式來僅取緯度,經度部分:

import re 
convert=str(json_result) 

pattern=r"(l([ng]|[at]).'):\s[-]?\d{0,15}.\d{0,15}" 

match=re.finditer(pattern,convert) 


print([i.group() for i in match])