如何将信息保存为json作为数组python

时间:2016-04-22 19:09:15

标签: python json save load kivy

我正在python ad kivy制作应用程序,让用户输入时间,血糖,碳水化合物和药物。目前,我将来自用户输入的信息保存到TinyDB json文件中,并且不会删除以前的信息。但是,我无法弄清楚如何检索特定的信息。我想知道是否有一种方法可以将json文件保存为数组或其他可以轻松检索特定信息的内容,例如用户的最后一个葡萄糖条目。这是我目前的代码。

的.py

def save_entry(self):
    store = JsonStore('entry.json')
    time = self.gt.text
    glucose = self.gr.text
    carbs = self.c.text
    medications_taken = self.mt.text


    db = TinyDB('entry.json')
    User = Query()
    db.insert({'time': time, 'glucose': glucose, 'carbs': carbs, 'medications_taken': medications_taken})


def retrieve(self):
    db = TinyDB('entry.json')
    User = Query()
    with open('entry.json', 'r') as f:
        f = db.search(Query().time != 0)[0]
        print f

.kv

<Phone>:

gt: _time
gr: _glucose_reading
c: _food
mt: _meds_taken

       Screen:
            name: 'new_entry'                
            GridLayout:
                cols:1
                BoxLayout:
                    Label:
                        size_hint_x: 0.22
                        bold: True
                        markup: True
                        text: '[size=40][color=0000ff]Time[/color][/size]'
                    TextInput:
                        id: _time
                        hint_text: 'Current Time'

                BoxLayout:
                    Label:
                        size_hint_x: 0.22
                        bold: True
                        markup: True
                        text: '[size=28][color=0000ff]Blood Sugar (mg/dL)[/color][/size]'
                    TextInput:
                        id: _glucose_reading
                        hint_text: 'Current Blood Sugar'

                BoxLayout:
                    Label:
                        size_hint_x: 0.22
                        bold: True
                        markup: True
                        text: '[size=40][color=0000ff]Carbs[/color][/size]'
                    TextInput:
                        id: _food
                        hint_text: 'Total Carbs for meal'

                BoxLayout:
                    Label:
                        size_hint_x: 0.22
                        bold: True
                        markup: True
                        text: '[size=30][color=0000ff]Medications Taken[/color][/size]'
                    TextInput:
                        id: _meds_taken
                        hint_text: 'Please Enter Any Medications Taken'
                    Button:
                        size_hint_x: 0.15
                        text: 'Save'
                        on_press: root.save_entry()

                    Button:
                        size_hint_x: 0.15
                        text: 'Retrieve'
                        on_press: root.retrieve()

1 个答案:

答案 0 :(得分:2)

with内的retrieve似乎是多余的。也许这种形式会更好:

def retrieve(self):
    db = TinyDB('entry.json')
    f = db.search(Query().time != 0)[0]
    print f

您要求一种简单的方法来检索用户的最新血糖值。试试这个:

f = db.search(Query().time != 0)[-1]['glucose']
print f

f = db.search(Query().time != 0)[-1]
print f['glucose']

检索用户最近的五个葡萄糖值:

f=db.search(Query().time != 0)[-5:]
print ', '.join(str(x['glucose']) for x in f)