I can confirm the undesirable output. It can be fully represented as a string using StrD() as a converter but not as a number. I know a string is not what is wanted though.
Regarding numbers the standard linked to in the PureBasic Help says this:
RFC 7159 JSON March 2014 wrote:This specification allows implementations to set limits on the range
and precision of numbers accepted. Since software that implements
IEEE 754-2008 binary64 (double precision) numbers [IEEE754] is
generally available and widely used, good interoperability can be
achieved by implementations that expect no more precision or range
than these provide, in the sense that implementations will
approximate JSON numbers within the expected precision. A JSON
number such as 1E400 or 3.141592653589793238462643383279 may indicate
potential interoperability problems, since it suggests that the
software that created it expects receiving software to have greater
capabilities for numeric magnitude and precision than is widely
available.
While it is implementation dependent the implementation should realistically be one that is able to include double precision values fully. This appears to not be the case here, only float precision appears to be implemented.
I think this would fall under a feature request to update the representation of numbers to include full double precision floats.
I've made a feature request.