2017-05-30 30 views
1

JSONデータ内の配列の一部であるフィールドの値にアクセスしようとしています。私は「キャンペーン」のアレイに表示されますフィールド「ID」の値を引くしようとしていますJSONデータから配列内のフィールドの値にアクセスする

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

ここに私は私のコードのセクションを使用していますということです。ここではJSONデータ(Iです。これを使用する場合は

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

、私は「キャンペーン」のアレイの代わりに、キャンペーンのすべてのためだけのIDの値全体を取り戻す誰もが私が間違っているのかを指し示す役立ちます。これを実現するためには、のように見えますここに?私はまだPythonの新版です。

答えて

2

まず、api_response.json()を使用してJSON辞書としての応答を取得できます。 campaignsとキー値がリストであるため

第二に、あなたはid Sを収集するために、リスト内包またはmapを使用する必要があり、次のいずれか

>>> 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] 
+0

私はそれが欠けていると、正しい結果が働いて、与えたかどうかはわかりませんよ')'と '.get( 'campaigns'、[])'を使用しないでください –

+0

これは素晴らしい、ありがとうございます。 – user7681184

1

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

これは、filtered_campaignsをIDのリストと同じに設定するリストの解説です。

関連する問題