Проблема почти наверняка связана с одновременной записью в файл. В Node.js fs.writeFile работает асинхронно, и если несколько сообщений приходят почти одновременно, происходит несколько попыток прочитать и записать файл одновременно. В результате: часть данных может не успеть сохраниться, файл обрывается и возникает Unexpected end of JSON input; или записывается неполная/повторяющаяся структура, поэтому появляются лишние фигурные скобки.
Как это исправить? Использовать синхронную запись:
fs.writeFileSync("./data.json", JSON.stringify(json_data, null, 2));
Синхронная запись блокирует выполнение до окончания записи, и данные не перемешиваются. Или реализовать очередь на запись: не писать в файл, пока предыдущая запись не завершилась. Можно хранить все изменения в памяти и периодически сбрасывать их в файл. Проверять, что JSON.parse обрабатывает только полностью прочитанный файл, и обрабатывать возможные ошибки через try/catch. В общем, корень проблемы не в синтаксисе JSON, а в том, что несколько операций записи идут одновременно и конфликтуют.