Проверь наличие записи с искомым id в json и как то это обрабатывай, по уму подумай а есть ли .json файл вообще, проверяй ошибки записи и т.п.
А еще ты обманываешь пользователей :) ты сначала им говоришь что ранг увеличил и только потом его увеличиваешь, а если в этот момент что то произойдет?
Кстати подумай хорошо, что случится, если места для записи .json файла не хватит (или любая другая проблема) - старое содержимое будет утеряно а новое не будет записано до конца. Хорошим способом работы со своим хранилищем на файлах является подход - любую перезапись делай созданием нового временного файла с записываемым содержимым, если запись успешна - удаляешь старый файл и переименовываешь временный в итоговый... таким образом любая ошибка в этом алгоритме (если их отслеживать) не уничтожит данные, хотя бы старые.
Еще совет, сохраняй все не в один огромный файл а в много маленьких (отдельный каталог для них), заводи на каждого user_id свой файл, где этот идентификатор в имени файла. В этом случае твой код не будет тормозить при большом количестве пользователей и работать с такой "базой" гораздо удобнее (файловая система это типичная key-value база данных)
p.s. ну конечно лучше пользоваться готовыми базами данных, нет нужды изобретать паровоз, посмотри sqlite - это sql база данных на основе файла, нет никаких серверов и все просто и удобно