use json storage instead of shelve