Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图在列表中解析json字典以创建sqlite数据库_Python_Json_Sqlite_Dictionary_Unicode - Fatal编程技术网

Python 试图在列表中解析json字典以创建sqlite数据库

Python 试图在列表中解析json字典以创建sqlite数据库,python,json,sqlite,dictionary,unicode,Python,Json,Sqlite,Dictionary,Unicode,我有以下代码将原始输入写入文件: 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()

我有以下代码将原始输入写入文件:

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'
导入json
导入sqlite3
conn=sqlite3.connect('meds.sqlite')
cur=连接光标()
当前执行脚本(“”)
如果存在MED,则丢弃表格;
如果有食物,放下桌子;
创建表格药物(
id整数非空主键自动递增唯一,
时间文本唯一
);
创造餐桌上的食物(
id整数非空主键自动递增唯一,
meds_id整数,
状态文本唯一
);
''')
fname=raw_输入('输入文件名:')
if(len(fname)<1):fname='chance1.json'
str_data=open(fname).read()
json\u data=json.loads(str\u数据)
对于json_数据中的条目:
时间=输入[“药物”]
状态=条目[“食品”]
打印时间、状态'

然而,我最终得到了一个回溯
键错误:“食物”
。请问,如何着手解决这个问题,有什么建议吗?请注意代码还没有完成,因为我无法超越这一部分!(文件也有可能是Unicode格式的,因为当我打印条目时,每个条目前都会有一个“u”。

你的大部分文章都与
键错误无关。您正在向词典查询一些不存在的内容,即与键
“food”
关联的值

一种解决方案是使用
dict.get
,如果找不到密钥,则返回None:

status = entry.get('food')
# status will be None if there is no 'food' key
您还可以使用带有默认值的
get

status = entry.get('food', 123)
另一种可能是缺少密钥表示应用程序中存在错误。在这种情况下,您需要考虑为什么没有<代码>“食物”<代码>键。

目前,您正在将
“食物”
“药物”
信息存储在单独的词典中,然后将它们合并到一个列表中。也许您需要以下内容:

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

with open("chance1.json", "a") as f:
   json.dump(data, f)
这就把食品和药品信息放在了同一本字典里。请注意,以模式
'a'
打开文件意味着新数据将附加到现有文件中。如果要附加到存储为json的现有列表中,则需要读取现有数据,对其进行解析,将新项添加到列表中,然后重新写入文件。
检查您的json文件,它看起来像您期望的吗?

尝试在您的循环中打印条目当我在循环中打印条目时,我得到:{u'meds':u'11:00'}等每个条目