Вы столкнулись с точностью поплавка двойной точности IEEE, которая использует 53 бита для мантиссы и 11 бит для экспоненты.
Числа Javascript, ВСЕ из них, представлены 64-битными числами с плавающей запятой. Числа с плавающей точкой во многих языках представлены двумя частями - мантиссой и показателем степени. В Javascript мантисса составляет 53 бита, а показатель степени - 11 бит.
Когда вы видите числа, выраженные, например, как 3,5346367e + 22, мантисса равна 3,5246367, а показатель степени равен 22.
Числа, которые вы пытаетесь сохранить, больше максимального значения мантиссы, поэтому ваши числа округляются, а большие числа получают показатель степени.
Короче говоря, если вы не выполняете арифметические операции с этими огромными числами, вы должны хранить их в виде строки.
Наконец, вы должны выражать JSON Arrays как фактические JSON Arrays, а не как объекты, которые притворяются массивами, определяя целочисленные ключи и свойство length:
// Do this
json = '["16970861903381446063"]';
// Not this
json = '{0:"16970861903381446063", length:1}';