2014-04-26 29 views
23

Próbuję uzyskać kod pocztowy dla konkretnego miasta za pomocą zippopotam.us. Mam następujący kod, który działa, z wyjątkiem, gdy próbuję uzyskać dostęp do klucza post code która zwraca TypeError: expected string or bufferPython z dostępem do zagnieżdżonych danych JSON

r = requests.get('http://api.zippopotam.us/us/ma/belmont') 
j = r.json() 

data = json.loads(j) 

print j['state'] 
print data['places']['latitude'] 

pełnej mocy JSON:

{ 
"country abbreviation": "US", 
"places": [ 
    { 
     "place name": "Belmont", 
     "longitude": "-71.4594", 
     "post code": "02178", 
     "latitude": "42.4464" 
    }, 
    { 
     "place name": "Belmont", 
     "longitude": "-71.2044", 
     "post code": "02478", 
     "latitude": "42.4128" 
    } 
], 
"country": "United States", 
"place name": "Belmont", 
"state": "Massachusetts", 
"state abbreviation": "MA" 
} 

Dzięki za pomoc.

Odpowiedz

13

Nie zdawałem sobie sprawy, że pierwszy zagnieżdżony element jest w rzeczywistości tablicą. Prawidłowy dostęp do klucza do kodu pocztowego jest następujący:

r = requests.get('http://api.zippopotam.us/us/ma/belmont') 
j = r.json() 

print j['state'] 
print j['places'][1]['post code'] 
35

Miejsca to lista, a nie słownik. Poniższa linia nie powinna zatem działać:

print data['places']['latitude'] 

Musisz wybrać jedną z pozycji w miejscach, a następnie możesz wyświetlić właściwości miejsca. Tak, aby uzyskać pierwszy kod pocztowy zrobiłbyś:

print data['places'][0]['post code'] 
5

w kodzie j jest już json danych oraz j [ „miejsca”] jest lista dict.

r = requests.get('http://api.zippopotam.us/us/ma/belmont') 
j = r.json() 

print j['state'] 
for each in j['places']: 
    print each['latitude'] 
3

Używam tego lib dostęp do zagnieżdżonych klawisze DICT

https://github.com/mewwts/addict

import requests 
from addict import Dict 
r = requests.get('http://api.zippopotam.us/us/ma/belmont') 
ad = Dict(r.json()) 

print j.state 
print j.places[1]['post code'] # only work with keys without '-', space, or starting with number 
Powiązane problemy