Python accédant à des données JSON imbriquées
j'essaie d'obtenir le code postal d'une ville en particulier en utilisant zippopotam.nous. J'ai le code suivant qui fonctionne, sauf quand j'essaie d'accéder au post code
touche qui retourne TypeError: expected string or buffer
r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()
data = json.loads(j)
print j['state']
print data['places']['latitude']
Plein de sortie 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"
}
Merci pour votre aide.
4 réponses
Lieux est une liste qui n'est pas un dictionnaire. Cette ligne ci-dessous ne devrait donc pas fonctionner:
print data['places']['latitude']
Vous devez sélectionner l'un des éléments dans des lieux et ensuite, vous pouvez lister les propriétés. Ainsi, pour obtenir le premier code postal que vous feriez:
print data['places'][0]['post code']
je ne savais pas que le premier élément imbriqué est en fait un tableau. La bonne façon de l'accès au code postal de la clé est comme suit:
r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()
print j['state']
print j['places'][1]['post code']
Dans votre code j est Déjà données json et j [lieux] n'est pas 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']
j'utilise cette lib pour accéder à des touches dict imbriquées
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