从JSON数据

时间:2017-05-30 22:01:09

标签: python arrays json python-2.7

我正在尝试访问作为JSON数据中数组一部分的字段的值。这是JSON数据(I:

{
"response":
{
"test-item": {
    "id": 125252,
    "code": null,
    "name": "test_1",
    "section_id": 85552653,
    "state": "active",
    "start_date": "2016-10-10 00:00:00",
    "end_date": null,
    "timezone": "US/Pacific",
    "discrepancy_pct": 0,
    "publishers_allowed": "all",
    "campaigns": [
        {
            "id": 85669995691,
            "name": "test_campaign",
            "profile_id": 43562,
            "inventory_type": "direct",
            "state": "active",
            "priority": 5,
        },
        {
            "id": 800099981123,
            "name": "test_campaign_2",
            "profile_id": 12562,
            "inventory_type": "direct",
            "state": "active",
            "priority": 5,
        }
    ]}}}

我只想提取“campaign”数组中显示的字段“id”的值。以下是我用来实现此目的的代码部分:

url = "https://api.example.com"  

header = {"Authorization": authorization_code}

api_response = requests.get(url, headers=header)

test_response = json.loads(api_response.text)

filtered_campaigns = test_response.get("response", {}).get("test-item", 
{}).get("campaigns", "id")

使用此功能时,我会返回“campaign”数组的整个值,而不仅仅是所有广告系列的ID。谁能帮助指出我在这里做错了什么?我仍然是Python的新手。

2 个答案:

答案 0 :(得分:2)

首先,您可以使用api_response.json()将响应作为JSON字典获取。

其次,由于使用campaigns键入的值是列表,因此您应该使用列表解析或map来收集id s:

>>> from operator import itemgetter
>>> test_response = api_response.json()
>>> filtered_campaigns = map(
        itemgetter("id"), 
        test_response.get("response", {}).get("test-item", {}).get("campaigns", []))

[85669995691, 800099981123] 

答案 1 :(得分:1)

使用以下内容:

filtered_campaigns = [x['id'] for x in test_response['response']['test-item']['campaigns']]

这是一个列表理解,将filtered_campaigns设置为等于ID列表。