Un JSON et après ?

Le
ffred13
Bonjour

Je suis en plein apprentissage du python, je rencontre quelques difficult=
és pourriez vous m'aider SVP

J'essaie de récupérer à partir de google api la distance en 2 villes

import urllib, json
import pprint

URL2 = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=
=Paris&destinations=Marseille&mode=driving&language=fr-FR&sensor==
false"

googleResponse = urllib.urlopen(URL2)
jsonResponse = json.loads(googleResponse.read())

# pour le débug
pprint.pprint(jsonResponse)


Je reçois ce type de réponse

{u'destination_addresses': [u'Marseille, France'],
u'origin_addresses': [u'Paris, France'],
u'rows': [{u'elements': [{u'distance': {u'text': u'774 km',
u'value': 774475},
u'duration': {u'text': u'6 heures 47 minutes',
u'value': 24438},
u'status': u'OK'}]}],
u'status': u'OK'}

2 questions :

- Pourquoi j'ai des u partout ?
- J'ai besoin de récupérer les données distance-value et duration-val=
ue, comment le faire simplement ?

Je vous remercie

Bonne journée

ffred13
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
yves
Le #25408092
Le Tue, 14 May 2013 23:32:34 -0700, ffred13 a écrit:

Bonjour,

- Pourquoi j'ai des u partout ?



Ca indique que les chaînes de caractères qui suivent sont en unicode. Il
faudrait trouver un pointeur vers le bon endroit de la documentation
python.
C'est d'autant plus important à connaître que ça correspond à une
différence majeure python 2/ python 3

- J'ai besoin de récupérer les données distance-value et duration-value,
comment le faire simplement ?



Ce qui suit marche (ce serait bien qu'il existe plus élégant):

duration = jsonResponse['rows'][0].values()[0][0]['duration']['value']
distance = jsonResponse['rows'][0].values()[0][0]['distance']['value']

print duration
print distance


@+
--
Yves
Tanguy Ortolo
Le #25408632
ffred13, 2013-05-15 08:32+0200:
pprint.pprint(jsonResponse)

Je reçois ce type de réponse

{u'destination_addresses': [u'Marseille, France'],
u'origin_addresses': [u'Paris, France'],
u'rows': [{u'elements': [{u'distance': {u'text': u'774 km',
u'value': 774475},
u'duration': {u'text': u'6 heures 47 minutes',
u'value': 24438},
u'status': u'OK'}]}],
u'status': u'OK'}

2 questions :

- Pourquoi j'ai des u partout ?



Parce que ce sont des chaînes de caratères Unicode.

- J'ai besoin de récupérer les données distance-value et duration-value, comment le faire simplement ?



jsonResponse[u'distance'][u'value']
ffred13, 2013-05-15 08:32+0200:

--
. o .
. . o Tanguy
o o o
Pierre Maurette
Le #25409172
ffred13 :
Bonjour

Je suis en plein apprentissage du python, je rencontre quelques difficultés
pourriez vous m'aider SVP

J'essaie de récupérer à partir de google api la distance en 2 villes

import urllib, json
import pprint

URL2 =
"http://maps.googleapis.com/maps/api/distancematrix/json?origins=Paris&destinations=Marseille&mode=driving&language=fr-FR&sensorúlse"

googleResponse = urllib.urlopen(URL2)
jsonResponse = json.loads(googleResponse.read())

# pour le débug
pprint.pprint(jsonResponse)


Je reçois ce type de réponse

{u'destination_addresses': [u'Marseille, France'],
u'origin_addresses': [u'Paris, France'],
u'rows': [{u'elements': [{u'distance': {u'text': u'774 km',
u'value': 774475},
u'duration': {u'text': u'6 heures 47 minutes',
u'value': 24438},
u'status': u'OK'}]}],
u'status': u'OK'}

2 questions :

- Pourquoi j'ai des u partout ?



unicode. Vous pouvez pour l'instant l'admettre.

- J'ai besoin de récupérer les données distance-value et duration-value,
comment le faire simplement ?



L'expression que vous obtenez en réponse n'est pas simple, elle est
donc intéressante en phase d'apprentissage. Il vous faut avoir à portée
la documentation de base sur les dictionnaires et les listes. Ensuite,
vous détricotez l'expression. Vous pouvez vous aider de votre éditeur
de code. Il ne formatera certainement pas l'expression comme vous le
souhaitez, en revanche il peut être très utile en montrant les couples
de crochets, parenthèses et autre accolades. Mis en forme ça pourrait
ressembler à:

x = {u'destination_addresses': [u'Marseille, France'
],
u'origin_addresses' : [u'Paris, France'
],
u'rows' : [{u'elements': [{u'distance': {u'text' :
u'774 km',
u'value':
774475
},
u'duration': {u'text' :
u'6 heures 47 minutes',
u'value':
24438
},
u'status' : u'OK'
}
]
}
],
u'status' : u'OK'
}

Vous pouvez isoler x['rowx'] (ou x['rowx'][0]).
Vous allez remarquer un truc un peu troublant, c'est l'utilisation de
listes singleton (à un seul élément) là où semble-t-il l'élément aurait
suffi. Admettez-le pour l'instant, les raisons en sont sans doute dans
la tripaille, le passage de paramètres, le fait que ce résultat a à
faire avec un autre langage, ou au moins su code non Python. Si vous
avez pratiqué d'autres langages, entendu parler de passage par (copie
de) valeur, adresse, référence, ceci vous dira peut-être quelque chose:

def f1(liste):
liste[0] = 0

def f2(valeur):
valeur = 0

a = 10
b = [10]
print 'avant: %d' % a
f2(a)
print u'après: %d' % a

print 'avant: %d' % b[0]
f1(b)
print 'après: %d' % b[0]

Ensuite, vous verrez que récupérer les données distance-value et
duration-value n'est pas sorcier. Même si l'expression est un peu
velue. A ce moment-là, vous la cachez dans une fonction
getDistance-value(lastructure), votre coeur de code sera plus
sympathique à lire.


--
Pierre Maurette
Publicité
Poster une réponse
Anonyme