2013-07-19 5 views
0

Я пытаюсь создать небольшой скрипт, который будет проходить через API Etsy и получить определенную информацию. API возвращает 25 разных списков в json, и я был бы признателен, если бы кто-то помог мне научиться обрабатывать по одному.Parsing Несколько элементов json в python

Вот пример 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()' или 'request.Response.json()', как вы там делаете), да, вы можете повторять их так же :) – woozyking

+0

Ничего себе, это почти слишком легко. Ха-ха. Спасибо за помощь. Сейчас у меня это работает. – Heisenberg