2016-09-17 3 views
-1

Ich versuche, das 'Temp' Element von einer JSON-Urlfil zu drucken. Das Problem ist, ich kann nicht nur print(item['temp'] in Typen Wenn ich das tue ich diesen Fehler:Nicht möglich, gewünschte Artikel von JSON Api zu drucken

TypeError: string indices must be integers

Also dachte ich, ich stattdessen eine ganze Zahl zu verwenden hatte, das ist, was ich tat. Aber wenn es druckt das Ergebnis bekam ich diese:

„f c“

Dieser keinen Sinn macht, spielt keine Rolle, welche Zahl ich eintippen ich ein Ergebnis in Form erhalten 2 Buchstaben.

Hier ist der Code:

import urllib.request 
import json 

url = urllib.request.urlopen("http://www.myweather2.com/developer/forecast.ashx?uac=fRnJKj3Xpi&output=json&query=SW1") 
readurl = url.read() 
json_obj = str(readurl, "utf-8") 
data = json.loads(json_obj) 

for item in data['weather']: 
    print(item[0]) 
+0

Das ist, weil 'Element' ist eine Zeichenfolge, kein Diktat. Sie sind * Schlüssel * in einem Wörterbuch. –

+0

@MartijnPieters Wie ruft man ein Element in einer solchen Liste an? – Vitalynx

Antwort

0

data['weather'] ist ein Wörterbuch und direkt über ein Wörterbuch Looping erzeugt die Schlüssel in diesem Wörterbuch. Hier ist jede Taste eine Zeichenkette; entweder 'curren_weather' oder 'forecast'. Als solche nimmt item[0] den ersten Buchstaben jeder dieser Tasten, so dass Sie am Ende Druck f und c:

>>> for item in data['weather']: 
...  print(item) 
... 
curren_weather 
forecast 
>>> for item in data['weather']: 
...  print(item[0]) 
... 
c 
f 

Ich nehme an, Sie 'temp' Schlüssel der Liste der Wörterbücher in der Liste verwiesen drucken möchten durch curren_weather statt:

for curr in data['weather']['curren_weather']: 
    print(curr['temp'] + curr['temp_unit']) 

ich habe den temp_unit Wert zu; die obigen Ausgänge:

15c