使用OFFSET在Python通过JSON迭代 [英] Iterating through JSON in Python using an OFFSET

查看:1388
本文介绍了使用OFFSET在Python通过JSON迭代的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用HubSpot CRM API来获取所有交易。

I am trying to use the HubSpot CRM API to get "All Deals".

该API端点: https://api.hubapi.com /交易/ V1 /协议/所有?hapikey =演示

该JSON返回看起来像这样...

The JSON returned looks like this...

{
    "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
}

据我所知,如果 hasMore ==真,那么你就应该抓住偏移,包括它在另一API调用是这样的: https://开头的API ?.hubapi.com /交易/ V1 /协议/所有hapikey =演示和放大器;偏置= 1467187

And I understand that if hasMore==true, then you are supposed to grab the offset and include it in another API call something like this: https://api.hubapi.com/deals/v1/deal/all?hapikey=demo&offset=1467187

然后继续这样做直到 hasMore ==虚假

我用下面的code提取JSON从API第一个块:

I am using the following code to extract the first chunk of JSON from the API:

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)

所以...我的问题是,现在我得到我的JSON,我该怎么办:

So... my question is that now I am getting my JSON, how do I:

1)阅读JSON结果的一大块
2)如果 hasMore ==真然后去做#1再次搜索
3)elseif的 hasMore ==虚假然后再从上面#1所有迭代把所有的JSON到一个大的JSON结果
4)#3返回值

1) Read one chunk of JSON
2) If hasMore==true then go do #1 again
3) ElseIf hasMore==false then combine ALL the JSON from ALL iterations of #1 above into one big JSON
4) Return the value from #3

任何帮助吗?

推荐答案

工作液

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))

这篇关于使用OFFSET在Python通过JSON迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆