How to save information in json file without deleting previous information python
Question: I am making an app using python and kivy that allows the user to make a new
entry for their glucose readings. Right now it saves into the json file but
another new entry deletes the previous data. How can I make it so that each
entry saves separately so that I can access the information for the user's
history?

**.py file**

    
    
    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.popup import Popup
    from kivy.uix.button import Button
    from kivy.graphics import Color, Rectangle
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.image import AsyncImage
    from kivy.uix.label import Label
    from kivy.properties import StringProperty, ListProperty
    from kivy.uix.behaviors import ButtonBehavior
    from kivy.uix.textinput import TextInput
    from kivy.network.urlrequest import UrlRequest
    from kivy.storage.jsonstore import JsonStore
    from os.path import join
    from os.path import exists
    from kivy.compat import iteritems
    from kivy.storage import AbstractStore
    from json import loads, dump
    from kivy.config import Config
    import os
    import errno
    
    
    
    class Phone(FloatLayout):
        def __init__(self, **kwargs):
            # make sure we aren't overriding any important functionality
            super(Phone, self).__init__(**kwargs)
    
        with self.canvas.before:
            Color(0, 1, 0, 1)  # green; colors range from 0-1 instead of 0-255
            self.rect = Rectangle(size=self.size, pos=self.pos)
    
        self.bind(size=self._update_rect, pos=self._update_rect)
    
    
        if not os.path.exists('hello.json'):
            with open('hello.json', 'wt') as inFile:
                inFile.write("")
    
        else:
            with open('hello.json') as inFile:
                try:
                    data = Phone.load(self)
                except KeyError:
                    data = []
    
    def _update_rect(self, instance, value):
        self.rect.pos = instance.pos
        self.rect.size = instance.size
    
    def product(self, instance):
        self.result.text = str(float(self.w.text) * 703/ (float(self.h.text) * float(self.h.text)))
    
    def save(self):
        store = JsonStore('hello.json')
        name = self.n.text
        gender = self.g.text
        dtype = self.t.text
        height = self.h.text
        weight = self.w.text
        bmi = self.result.text
        medications = self.m.text
        insulin = self.ti.text
        store.put('profile', name=name, gender=gender, dtype=dtype, height=height, weight=weight, bmi=bmi, medications=medications, insulin=insulin)
    
    
    def save_entry(self):
        time = self.gt.text
        glucose = self.gr.text
        carbs = self.c.text
        medications_taken = self.mt.text
        store.put('entry', time=time, glucose=glucose, carbs=carbs, medications_taken=medications_taken)
    
    
    
    def load(self):
        store = JsonStore('hello.json')
        profile = store.get('profile')
        self.n.text = profile['name']
        self.g.text = profile['gender']
        self.t.text = profile['dtype']
        self.h.text = profile['height']
        self.w.text = profile['weight']
        self.result.text = profile['bmi']
        self.m.text = profile['medications']
        self.ti.text = profile['insulin']
    
    
    
    
    
    
    presentation = Builder.load_file("main.kv")
    
    class PhoneApp(App):
        def build(self):
            store = JsonStore('hello.json')
    
            return Phone()
    
    
    
    if __name__ == '__main__':
        PhoneApp().run()
    


Answer: Use some small json database like [this](https://pypi.python.org/pypi/tinydb)
to keep it clean. Example usage:

    
    
    from tinydb import TinyDB, Query
    
    db = TinyDB('./db.json')
    User = Query()
    db.insert({'name': 'John', 'age': 22})
    result = db.search(User.name == 'John')
    print result
    

