Itering durch JSON in Python mit einem OFFSET

Ich versuche, die HubSpot CRM API zu verwenden, um "All Deals" zu bekommen.

Der API-Endpunkt lautet: https://api.hubapi.com/deals/v1/deal/all?hapikey=demo

Der JSON kehrt so aus …

{ "deals": [ { "portalId": 62515, "dealId": 18039629, "isDeleted": false, "associations": { "associatedVids": [], "associatedCompanyIds": [], "associatedDealIds": [] }, "properties": { "dealname": { "value": "Company", "timestamp": 1457040864519, "source": "API", "sourceId": null }, "amount": { "value": "10", "timestamp": 1457040864519, "source": "API", "sourceId": null }, "closedate": { "value": "", "timestamp": 1457040864519, "source": "API", "sourceId": null }, "hubspot_owner_id": { "value": "11626092", "timestamp": 1457046177648, "source": "SALESFORCE", "sourceId": null }, "hs_lastmodifieddate": { "value": "1457046177662", "timestamp": 1457046177662, "source": "CALCULATED", "sourceId": null }, "hubspot_owner_assigneddate": { "value": "1457046177648", "timestamp": 1457046177648, "source": "SALESFORCE", "sourceId": null }, "num_associated_contacts": { "value": "0", "timestamp": 0, "source": "CALCULATED", "sourceId": null }, "hs_createdate": { "value": "1457040864535", "timestamp": 1457040864535, "source": null, "sourceId": null }, "createdate": { "value": "1457040864535", "timestamp": 1457040864535, "source": null, "sourceId": null }, "hs_salesforceopportunityid": { "value": "00628000007nRyuAAE", "timestamp": 1457046177648, "source": "SALESFORCE", "sourceId": null } }, "imports": [] }, { "portalId": 62515, "dealId": 18040854, "isDeleted": false, "associations": { "associatedVids": [], "associatedCompanyIds": [], "associatedDealIds": [] }, "properties": { "dealname": { "value": "5678", "timestamp": 1457042290572, "source": "API", "sourceId": null }, "amount": { "value": "750000.0", "timestamp": 1457042290572, "source": "API", "sourceId": null }, "closedate": { "value": "", "timestamp": 1457042290572, "source": "API", "sourceId": null }, "hs_lastmodifieddate": { "value": "1457042290592", "timestamp": 1457042290592, "source": "CALCULATED", "sourceId": null }, "num_associated_contacts": { "value": "0", "timestamp": 0, "source": "CALCULATED", "sourceId": null }, "hs_createdate": { "value": "1457042290592", "timestamp": 1457042290592, "source": null, "sourceId": null }, "createdate": { "value": "1457042290592", "timestamp": 1457042290592, "source": null, "sourceId": null } }, "imports": [] } ], "hasMore": true, "offset": 1467187 } 

Und ich verstehe das wenn hasMore==true , dann solltest du den offset packen und ihn in einen anderen API-Aufruf hasMore==true , so etwas wie hasMore==true : https://api.hubapi.com/deals/v1/deal/all?hapikey=demo&offset = 1467187

Und dann mach weiter, bis es hasMore==false .

Ich benutze den folgenden Code, um das erste Stück von JSON aus der API zu extrahieren:

 import requests url = "https://api.hubapi.com/deals/v1/deal/all" querystring = {"hapikey":"demo"} headers = { 'cache-control': "no-cache" } response = requests.request("GET", url, headers=headers, params=querystring) print(response.text) 

Also … meine Frage ist, dass ich jetzt meine JSON bekomme, wie kann ich:

1) Lesen Sie ein Stück JSON
2) Wenn hasMore==true dann gehen Sie wieder # 1
3) ElseIf hasMore==false dann kombiniere ALLE JSON von ALL Iterationen von # 1 oben in einen großen JSON
4) Geben Sie den Wert von # 3 zurück

Irgendeine Hilfe bitte?

One Solution collect form web for “Itering durch JSON in Python mit einem OFFSET”

Arbeitslösung

 import json import requests url = "https://api.hubapi.com/deals/v1/deal/all" querystring = {"hapikey":"demo"} headers = { 'cache-control': "no-cache" } all_deals = [] response = requests.request("GET", url, headers=headers, params=querystring).json() for deal in response['deals']: all_deals.append(deal) hasMore = response['hasMore'] offset = response['offset'] while hasMore: querystring = { "hapikey":"demo", "offset":offset } response = requests.request("GET", url, headers=headers, params=querystring).json() for deal in response['deals']: all_deals.append(deal) hasMore = response['hasMore'] offset = response['offset'] print(json.dumps(all_deals)) 
  • Django-Rest-Framework-Berechtigungen für das Erstellen im Viewset
  • Mit django-rest-interface verwenden
  • Django REST Framework - Separate Berechtigungen pro Methoden
  • Kein Modul namens http_client Fehler beim Versuch, Django mit Django Rest Framework auszuführen
  • Django Rest Framework Lookup_field durch OneToOneField
  • Kein Modul namens urls in django-tastypie
  • Ist django-Kolben reif genug?
  • Implementierung von erholsamen Servern mit Django für Dojo's JsonRestStore - Welche Tools für den Job?
  • Django Rest Framework mit mehreren Viewsets und Routern für das gleiche Objekt
  • Wie kann ich über die REST-API in Python auf eine Sharepoint-Site zugreifen?
  • Grundlegende Authentifizierung mit urllib2 mit python mit JIRA REST api
  • Python ist die beste Programmiersprache der Welt.