2017-07-21 4 views
1

Ich versuche, das folgende Skript zu verwenden, um eine API-Abfrage auszuführen, die JSON ausgibt. Ich wiederhole den JSON, um das bestimmte Feld (Name) aller JSON-Objekte zu drucken. Meine Skripte drucken alle Elemente (Name, Klassifizierung, Details usw.) und nicht den Wert.Python iterieren Daten über JSON

Script:

import requests 
import json 

query_url = 'https://IP-address/api/request' 

data = {"query":"days>50", "type":"json", "size":3} 
response = requests.post(query_url, json=data, verify=False) 

json_data = json.loads(response.text) 


for name in json_data[0]: 
     print (name) 

JSON:

[ 
    { 
     "name": "Android", 
     "classification": "public", 
     "detail": "Tag1, Tag2, Tag3", 
     "days": 70, 
     "date_last": "2017-07-21 05:48:07 AM" 
    }, 
    { 
     "name": "iPhone", 
     "classification": "public", 
     "detail": "Tag4, Tag5, Tag6", 
     "days": 75, 
     "date_last": "2017-07-21 05:48:07 AM" 
    }, 
    { 
     "name": "Microsoft", 
     "classification": "public", 
     "detail": "Tag3, Tag8, Tag9", 
     "days": 90, 
     "date_last": "2017-07-21 05:48:07 AM" 
    } 
] 
+0

' für Namen in json_data [0] 'bedeutet nicht, dass Sie das Feld "Name" erhalten, können Sie rufen Sie einfach "name" jedes Element json_data [0] hat –

+0

Tun Sie dies einfach 'für Name, Wert in json_data [0] .items(): print (Name +" "+ Wert)' –

+0

Wenn er nur das Namensfeld will , Ich denke, er sollte einen 'if name == "name": 'statement direkt nach dem for hinzufügen, oder? –

Antwort

2

Mein Gefühl ist, dass ein Teil Das Problem ist, dass wir nicht klar darüber sind, was wir sehen ... also schlage ich vor, dass wir einen Moment brauchen, um unter die Haube zu schauen:

Wenn wir einfach Python bitten, uns jedes Element in json_data zu zeigen, Wir sehen, dass Python in jedem Wörterbuch in der Liste der Wörterbücher und wird sie für uns anzeigen.

In [23]: for item in json_data: 
    ...:  print(item) 
    ...: 
{'days': 70, 'classification': 'public', 'date_last': '2017-07-21 05:48:07 AM', 'name': 'Android', 'detail': 'Tag1, Tag2, Tag3'} 
{'days': 75, 'classification': 'public', 'date_last': '2017-07-21 05:48:07 AM', 'name': 'iPhone', 'detail': 'Tag4, Tag5, Tag6'} 
{'days': 90, 'classification': 'public', 'date_last': '2017-07-21 05:48:07 AM', 'name': 'Microsoft', 'detail': 'Tag3, Tag8, Tag9'} 

Von dort aus, da jedes Element ein Wörterbuch ist, unser nächster Schritt ist dann Python fragen Sie einfach die Werte mit dem Namen Schlüssel zugeordnet zu extrahieren:

In [21]: for item in json_data: 
    ...:  print(item['name']) 
    ...: 
    ...: 
Android 
iPhone 
Microsoft 
2

Wenn Sie json_data iterieren möchten, und drucken Sie jeden Namen Sie durch Schlüssel jedes Wörterbuch Wert zugreifen müssen:

for d in json_data: 
    print(d['name']) 

Or Wenn Sie nur den 'Namen' eines bestimmten Wörterbuchs drucken möchten, z die ersten in den JSON-Daten, Iteration ist nicht erforderlich:

print(json_data[0]['name']) 

Sagen Sie bitte die Ausgabe gedruckt in einer bestimmten Art und Weise haben wollen, können Sie str.format verwenden:

for d in json_data: 
    print("Name: {} Days: {}".format(d['name'], d['days'])) 
+0

Vielen Dank, ich würde gerne die str.format Option auf meinem Code haben .. – Karthik

0

Sie sollten Wert von Schlüssel zugreifen ' Name‘

Sie den Code unten ist

for i in json_data[0]: 
    print (i['name']) 
+0

Eine Schleife ist nicht notwendig, Ihr Code kann vereinfacht werden: 'json_data [0 ] ['Name'] ' – flevinkelming