2016-04-15 5 views
1

を作成するには、リスト内のJSON辞書を解析しよう:私は、ファイルにraw_input書き込みをするには、このコードを持っているSQLiteのデータベース

import json 

a = raw_input("time meds taken?: format '@12:00' ") 
b = raw_input("had food at that point?: format '#0/1' ") 

ax = {"meds": a} 
bx = {"food": b} 

with open("chance1.json", "a") as f: 
    json.dump([ax, bx], f) 

f.close() 

私はこれで終わる:

[{"meds": "11:00"}, {"food": "0"}, {"meds": "12:45"}, {"food": "0"}, {"meds": "10:45"}, {"food": "0"}] 

私は、取得する必要があります上記のデータをsqliteブラウザにコピーします。私は現在、次のコードを使用しています:

import json 
import sqlite3 

conn = sqlite3.connect ('meds.sqlite') 
cur = conn.cursor() 

cur.executescript(''' 
DROP TABLE IF EXISTS Meds; 
DROP TABLE IF EXISTS Food; 

CREATE TABLE Meds (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
time TEXT UNIQUE 
); 

CREATE TABLE Food (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
meds_id INTEGER, 
status TEXT UNIQUE 
); 

''') 

fname = raw_input('Enter file name: ') 
if (len(fname) < 1) : fname = 'chance1.json' 

str_data = open(fname).read() 
json_data = json.loads(str_data) 


for entry in json_data: 
    time = entry["meds"] 
    status = entry["food"] 
    print time, status' 

はしかし、私はトレースバックKeyError: "food"で終わります。どのようにこの問題を解決するために行くためのアドバイス、お願いしますか?私はこの部分を越えることができないので、コードが完成していないことに注意してください! (エントリが印刷されるときにファイルがUnicodeになる可能性もあります)。

+0

ループ内のエントリを印刷しようとする – Benjamin

+0

ループ内でエントリを印刷すると、各エントリに対して {u'meds:u'11:00 '}など – NamedN

答えて

1

投稿のほとんどはKeyErrorとは関係ありません。辞書に、存在しないもの、つまり、キーに関連付けられた値'food'の値を要求しています。

status = entry.get('food', 123) 

別の可能性が不足しているということです:あなたはまた、デフォルト値でgetを使用することができます

status = entry.get('food') 
# status will be None if there is no 'food' key 

:鍵が見つからない場合

一つの解決策は、Noneを返した、dict.getを使用することですキーはアプリケーションのエラーを表します。この場合、'food'キーがない理由を考慮する必要があります。

現在のところ、'food''meds'の情報を別々の辞書に格納しておき、それらをリストにまとめています。たぶんあなたは次の代わりに次のものを望むでしょう:

data = {"meds": a, "food": b} 

with open("chance1.json", "a") as f: 
    json.dump(data, f) 

これは、食品と薬の情報を同じ辞書に置きます。モード'a'でファイルを開くと、新しいデータが既存のファイルに追加されます。 jsonとして格納されている既存のリストに追加する場合は、既存のデータを読み込んで解析し、新しい項目をリストに追加してから、ファイルを書き直す必要があります。 jsonファイルを調べます。期待どおりに見えますか?

関連する問題