web-dev-qa-db-ja.com

Pythonを使用してJSONで値を見つける

以前はJSONファイルからデータを解析することに成功していましたが、今は達成したい機能に問題があります。 JSONに名前、識別番号、誕生日のリストがあります。私が取得したいのはPython=ユーザーに名前を入力させ、識別番号と生年月日(存在する場合)を取得できるようにすることです。

これは私の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"
 }
]

明確にするために、「V410Z8」と入力し、彼の名前と生年月日を取得します。

Pythonでいくつかのコードを記述しようとしましたが、「id_number」の検索に成功しましたが、「V410Z8」などの「id_number」の中にあるものは検索できません。

#!/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

ご支援ありがとうございます、みんな:)

7
antonioag

辞書のリストを反復処理し、指定されたid_numberを持つ辞書を検索する必要があります。それが見つかったら、id_numberが一意であると仮定して、そのデータの残りを印刷して中断できます。

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

データ構造を制御できる場合、より効率的な方法は、id_numberをキーとして使用することです(ここでも、id_numberが一意であると仮定します)。

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

それからあなたがする必要があるのは直接それにアクセスすることを試みることです:

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