我正在尝试访问作为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的新手。
答案 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列表。