У нас с JS есть общая тайна - мы оба не разбираемся в больших числах
P.S. JS не поддерживает целочисленные типы, все числа являются number, который по факту double, поэтому самый большой int который JS может сохранить без потери точности - 2^53 - 1
Никаких ошибок при попытке обработать слишком большое число не будет - оно просто сконвертируется в ближайшее представимое double (удачного дебага, если это ID в базе)
То же касается JSON - как формат, он не содержит точных требований как обрабатывать числа - всё number и зависит от имплементации. Какие-то языки и библиотеки различают int и double автомагически, какие-то всё интерпретируют как double, какие-то падают на конверсии.