Как обновлять файл json на php?
Всегда стремись разделять получение данных бакэндом и выдачу этоих данных на странице, когда это получение медленее чем работа слокальными данными... т.е. всегда кешируй данные, особенно когда инвалидация не строгая.

Отдельный демон (хоть и по крону) опрашивает api, проверяя появление новых данных или изменение. От этого api зависит, в худшем случае, если нет возможности даже даты изменений получить - запрашиваешь все данные, собираешь свой json и берешь из него как строка - хеш например md5, изменился - есть новые данные, значит записываешь json (совет если работаешь с файлами, пиши всегда файл с новым именем, и при запросе - отдавай тот что записал последним, после окончания записи старый файл удаляй, это исключит ошибку если будет запрос на чтение в момент сохранения).

Если api позволяет оценить изменения в данных, то хранить в файле json имеет смысл только если он не большой, иначе да, как то оптимизировать хранение, либо по файлу на объект либо действительно в базе данных, по желанию
если твой сайт отдает не тот же самый json, то имеет смысл его распарсить и сохранить данные в базу/файл в требуемом формате. насчет загрузки по крону, тут все зависит от деталей и реализации api: например, если ты загружаешь пункты службы доставки, то лучше добавить задачу в крон, а если тебе нужно получить список друзей пользователя в соц.сети, то крон тут врядли подойдет.