Otrzymuję informacje o pogodzie z adresu URL.
weather = urllib2.urlopen('url')
wjson = weather.read()
a otrzymuję:
{
"data": {
"current_condition": [{
"cloudcover": "0",
"humidity": "54",
"observation_time": "08:49 AM",
"precipMM": "0.0",
"pressure": "1025",
"temp_C": "10",
"temp_F": "50",
"visibility": "10",
"weatherCode": "113",
"weatherDesc": [{
"value": "Sunny"
}],
"weatherIconUrl": [{
"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
}],
"winddir16Point": "E",
"winddirDegree": "100",
"windspeedKmph": "22",
"windspeedMiles": "14"
}]
}
}
Jak mogę uzyskać dostęp do dowolnego elementu, który chcę?
jeśli to zrobię: print wjson['data']['current_condition']['temp_C']
pojawia się błąd mówiący:
indeksy łańcuchów muszą być liczbami całkowitymi, a nie str.
requests
to niesamowity sposób na dogadanie się z JSON .. Jeśli zajmujesz się skomplikowanymi adresami URL ... użyj go.Odpowiedzi:
import json weather = urllib2.urlopen('url') wjson = weather.read() wjdata = json.loads(wjson) print wjdata['data']['current_condition'][0]['temp_C']
To, co otrzymujesz z adresu URL, to ciąg json. I nie możesz go bezpośrednio przeanalizować za pomocą indeksu. Powinieneś przekonwertować go na dykt,
json.loads
a następnie możesz go przeanalizować za pomocą indeksu.Zamiast używać
.read()
do pośredniego zapisywania go w pamięci, a następnie odczytujson
, pozwóljson
załadować go bezpośrednio z pliku:wjdata = json.load(urllib2.urlopen('url'))
źródło
json.loads()
. Po prostu próbujesz uzyskać bezpośredni dostęp do JSON ... bez przekształcania w cokolwiek czytelnego dla Pythona lub używania do tego modułu.json.load(urllib2.urlopen('url'))
to bezpośrednio, zamiast pośrednio zapisywać w pamięciOto alternatywne rozwiązanie wykorzystujące żądania :
import requests wjdata = requests.get('url').json() print wjdata['data']['current_condition'][0]['temp_C']
źródło
„temp_C” jest kluczem wewnątrz słownika, który znajduje się na liście wewnątrz słownika
W ten sposób działa:
wjson['data']['current_condition'][0]['temp_C'] >> '10'
źródło
Tylko dla więcej opcji ... Możesz to również zrobić w ten sposób:
MYJSON = { 'username': 'gula_gut', 'pics': '/0/myfavourite.jpeg', 'id': '1' } #changing username MYJSON['username'] = 'calixto' print(MYJSON['username'])
Mam nadzieję, że to pomoże.
źródło
Inny alternatywny sposób użycia metody get z żądaniami:
import requests wjdata = requests.get('url').json() print wjdata.get('data').get('current_condition')[0].get('temp_C')
źródło