Смотря какой контент в json файле лежит. Если он маленький, а проект это просто небольшой пет проект, то и файлом обойтись можно. Тем более, если работа не подразумевает большое кол-во обращений.
что может пойти не так
1. Блокировка файла. Во время чтения файл блокируется и недоступен для других потоков. В принципе, если размер файла маленький, а кол-во обращений небольшое, то шанс того, что два потока попытаются получить доступ к файлу одновременно очень и очень мал, практически невозможен я бы сказал. Если использовать тот же sqlite3 - то нужно знать, что он так же блокирует доступ, во время работы.
2. Потеря данных. Если прочитать файл, скопировать контент из него в какую-то переменную, затем другой поток сделает то же самое. Первый поток добавит клиента X в json и дампнет его в файл. Второй поток добавит клиента Y и дампнет его в файл, при этом, учитывая то, что во втором потоке старый контент (до добавления клиента X), при дампе в файле уже не будет никакого клиента X, только Y.
Если учиться работать с базами данных, лучше выбрать нормальную, вроде postgresql, тогда никаких проблем не будет. sqlite3 - несерьезный вариант, что-то между обычным тектовиком и базой данных