2013-07-19 57 views
0

我試圖構建一個小腳本,它將通過Etsy API並檢索某些信息。該API返回json中的25個不同的列表,如果有人能幫助我學習如何處理一個,我將不勝感激。解析python中的多個json元素

這是我處理的JSON的例子:

{"count":50100,"results":[{"listing_id":114179207,"state":"active"},{"listing_id":11344567,"state":"active"}, 

等。

是否有一種簡單的方法一次只處理這些列表中的一個,以最大限度地減少我必須對API進行的調用量?

下面是一些我如何處理的只是一個代碼,當我將結果限制恢復爲1:

r = requests.get('http://openapi.etsy.com/v2/listings/active?api_key=key&limit=1&offset='+str(offset_param)+'&category=Clothing') 
raw_json = r.json() 
encoded_json = json.dumps(raw_json) 
dataObject = json.loads(encoded_json) 
if dataObject["results"][0]["quantity"] > 1: 
    if dataObject["results"][0]["listing_id"] not in already_done: 
     already_done.append(dataObject["results"][0]["listing_id"]) 
     s = requests.get('http://openapi.etsy.com/v2/users/'+str(dataObject["results"][0]["user_id"])+'/profile?api_key=key') 
     raw_json2 = s.json() 
     encoded_json2 = json.dumps(raw_json2) 
     dataObject2 = json.loads(encoded_json2) 

     t = requests.get('http://openapi.etsy.com/v2/users/'+str(dataObject["results"][0]["user_id"])+'?api_key=key') 
     raw_json3 = t.json() 
     encoded_json3 = json.dumps(raw_json3) 
     dataObject3 = json.loads(encoded_json3) 

回答

0

眼看results場(或鑰匙)如何包含表結構,你可以簡單地遍歷它像下面這樣

json_str = { ...other key-values, "results": [{"listing_id":114179207,"state":"active"},{"listing_id":11344567,"state":"active"}, ...and so on] } 
results = json_str['results'] # this gives you a list of dicts 

# iterate through this list 
for result in results: 
    if result['state'] == 'active': 
     do_something_with(result['listing_id'] 
    else: 
     do_someotherthing_with(result['listing_id'] # or none at all 
+0

所以,我可以只是迭代通過dataObject就像那樣? – Heisenberg

+0

只要將JSON字符串解碼爲Python數據結構(即使用'json.loads()'或'requests.Response.json()'),就可以像這樣迭代它們:) – woozyking

+0

哇,這太簡單了。哈哈。感謝您的幫助。我現在已經開始工作了。 – Heisenberg