And that syntax and specification leaves open the possibility of arbitrary precision integers. From the JSON RFC[1]:
> This specification allows implementations to set limits on the range and precision of numbers accepted.
Those limits vary by implementation. The subsequent paragraphs warn, of course, that not all implementations support sending or receiving numbers outside of certain ranges, and explicitly calls out the contiguous integer range of an IEEE double as a good range for good interoperability.
> “I want to transmit non-Json strings but claim they’re json “.
Those strings are already JSON.
There are serializers out there that support arbitrary precision integers. Python, for example, will happily serialize such integers:
In [6]: json.dumps(2 ** 512)
Out[6]: '13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096'
(This will parse in today's browsers, too, but you'll get an imprecise result, as JavaScript's Number cannot represent that value exactly. Larger numbers result in Infinity.)