J'essaie d'obtenir le code postal d'une ville en utilisant zippopotam.us. 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']
Sortie JSON complète:
{
"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 de votre aide.
Je n'avais pas réalisé que le premier élément imbriqué était en réalité un tableau. La manière correcte d’accéder à la clé de code postal est la suivante:
r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()
print j['state']
print j['places'][1]['post code']
Places est une liste et non 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 les lieux, puis vous pouvez répertorier les propriétés du lieu. Donc, pour obtenir le premier code postal que vous feriez:
print data['places'][0]['post code']
Dans votre code j est déjà json data et j ['places'] est une liste non dictée.
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 bibliothèque pour accéder aux clés 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