web-dev-qa-db-fra.com

Trouvez une valeur dans JSON en utilisant Python

J'ai déjà réussi à analyser des données à partir d'un fichier JSON, mais maintenant je suis confronté à un problème avec la fonction que je souhaite atteindre. J'ai une liste de noms, de numéros d'identification et de date de naissance dans un JSON. Ce que je veux obtenir dans Python est de pouvoir laisser un utilisateur entrer un nom et récupérer son numéro d'identification et la date de naissance (le cas échéant).

Voici mon exemple de fichier JSON:

[
 {
   "id_number": "SA4784",
   "name": "Mark",
   "birthdate": null
 },
 {
   "id_number": "V410Z8",
   "name": "Vincent",
   "birthdate": "15/02/1989"
 },
 {
   "id_number": "CZ1094",
   "name": "Paul",
   "birthdate": "27/09/1994"
 }
]

Pour être clair, je veux entrer "V410Z8" et obtenir son nom et sa date de naissance.

J'ai essayé d'écrire du code dans Python mais je ne réussis qu'à rechercher "id_number" et pas ce qu'il y a à l'intérieur "id_number" par exemple "V410Z8".

#!/usr/bin/python
# -*- coding: utf-8 -*-

import json 

database = "example.json"
data = json.loads(open(database).read())

id_number = data[0]["id_number"]
print id_number

Merci pour votre soutien, les gars :)

7
antonioag

Vous devez parcourir la liste des dictionnaires et rechercher celui avec le id_number. Une fois que vous l'avez trouvé, vous pouvez imprimer le reste de ses données et les interrompre, en supposant que id_number est unique.

data = [
 {
   "id_number": "SA4784",
   "name": "Mark",
   "birthdate": None
 },
 {
   "id_number": "V410Z8",
   "name": "Vincent",
   "birthdate": "15/02/1989"
 },
 {
   "id_number": "CZ1094",
   "name": "Paul",
   "birthdate": "27/09/1994"
 }
]

for i in data:
    if i['id_number'] == 'V410Z8':
        print(i['birthdate'])
        print(i['name'])
        break

Si vous contrôlez la structure des données, un moyen plus efficace serait d'utiliser le id_number comme clé (encore une fois, en supposant que id_number est unique):

data =  { "SA4784" : {"name": "Mark", "birthdate": None},
          "V410Z8" : { "name": "Vincent", "birthdate": "15/02/1989"},
          "CZ1094" : {"name": "Paul", "birthdate": "27/09/1994"}
        }

Il vous suffit ensuite d'essayer d'y accéder directement:

try:
    print(data["V410Z8"]["name"])
except KeyError:
    print("ID doesn't exist")
>> "Vincent"
18
DeepSpace