Python json

Bonsoir :slightly_smiling:

Est ce qu’un pro du python pourrai m’aider svp ?

Je voudrais pouvoir récupérer certains infos sur un fichier json.

Mais… je trouve pas grand chose sur la lib json… ou j’y comprends rien…

data = json.loads(r.data) print(json.dumps(data, indent=4))

voilà la sortie pour le moment :

Je voudrais pouvoir récupérer les infos d’après la date…
J’allais chercher en faisant un “for bidule in data”… mais il n’y a pas une autre solution plus propre ? en utilisant un objet ?

merci

C’est une liste de dictionnaires:
python.developpez.com/cours/Dive … hp#d0e6152
python.developpez.com/cours/Dive … /index.php

J’ai pas testé le code, mais:

devrait afficher le premier dictionnaire:

{ "dayOfWeek": 2, "t_color": "Bleu", "color": "blue", "month": 1, "year": 2013, "date": "20130101", "day": 1 }
et:

devrait afficher le N° du jour:

c’est assez marrant cette façon de faire :astonished:

Au final, je suis obligé de faire une boucle et de parcourir le fichier pour trouver la bonne date…
Mais je note cette façon de récupérer les infos.

j’ai fait comme ça du coup :


for t in data:
        dateNow=time.strftime("%Y%m%d", time.localtime())
        dateJson = t["date"]
        if(dateNow == dateJson):
                couleur = t["t_color"]

Vu que le conteneur est une liste, tu n’as pas d’autre choix que de la parcourir élément par élément.
Si c’est pour extraire une seule valeur une seule fois, ta boucle for … in actuelle est certainement la plus adaptée (avec peut-être un break en plus pour sortir de la boucle dès que tu trouves la valeur recherchée).

Par contre si tu as besoin d’accéder souvent à plusieurs valeurs dans la liste vaut mieux la transformer avant en un dictionnaire dont les clés sont le champ sur lequel tu fais une recherche.
Quelque chose du genre (pseudo-code, la flemme de chercher la bonne syntaxe Python) :

[code]d = dictionnaire_vide()
for t in data:
d[t[“date”]] = t

accès à des éléments :

print d[“20130101”][“color”]
print d[“20121231”][“dayOfWeek”][/code]

[quote=“vohu”]for t in data: dateNow=time.strftime("%Y%m%d", time.localtime()) dateJson = t["date"] if(dateNow == dateJson): couleur = t["t_color"] [/quote]
Ton dateNow n’a pas besoin d’être dans la boucle, tu peux le sortir avant le for ça sera plus efficace. :wink:

C’est fait, merci :slightly_smiling: