JSON support for BigInt in Chrome/V8

J Decker d3ck0r at gmail.com
Sat Jul 28 16:10:04 UTC 2018

On Sat, Jul 28, 2018 at 6:57 AM Michael Theriot <
michael.lee.theriot at gmail.com> wrote:

> In a language with arbitrary integer precision, Python 3 for example, the
> way to parse a "BigInt" would just be a plain, human readable number
> without quotes. The way to serialize it is the same. Any other kind of
> representation is out of spec, a workaround, and belongs in userland.

The problem with this, 'guessing' whether is't a Number() or a BigInt() is
that numbers and bigint's don't interop.

{a:123, b:123n}
" { "a":123, "b":123 }"  any expressions that expect B to be a BigInt()
will fail, becasue it will be in an expression of other bigints.

bigInts aren't just a better Number type, but, rather require other bigints
for their expressions.

> I think BigInt should serialize the same, not as strings or anything that
> is not a number. JSON.parse being unable to parse back into BigInt is a
> separate issue. It is solvable by using better parsing methods, not the
> convenient built-in one which has other issues. E.g. a streaming JSON
> parser that lets you inspect the key name and string being parsed can
> handle this. Case solved and you can also redesign your code so you are not
> creating a temporary object every single parse that you most likely copy
> into actual objects later.
> Not serializing BigInt is questionable to me but even that can be solved
> in userland.
> On Saturday, July 14, 2018, Anders Rundgren <anders.rundgren.net at gmail.com>
> wrote:
>> var small = BigInt("5");
>> var big = BigInt("5555555555555555555555555500003");
>> JSON.stringify([big,small]);
>> VM330:1 Uncaught TypeError: Do not know how to serialize a BigInt
>>     at JSON.stringify (<anonymous>)
>>     at <anonymous>:1:6
>> JSON Number serialization has apparently reached a new level (of
>> confusion).
>> Personally I don't see the problem.  XML did just fine without hard-coded
>> data types.
>> The JSON type system is basically a relic from JavaScript.  As such it
>> has proved to be quite useful.
>> However, when you are outside of that scope, the point with the JSON type
>> system gets pretty much zero since you anyway need to map extended types.
>> Oracle's JSON-B solution which serializes small values as Number and
>> large values as String rather than having a unified serialization based on
>> the underlying data type seems like a pretty broken concept although indeed
>> fully conforming to the JSON specification. "Like the Devil reads the
>> Bible" as we say in Scandinavia :-)
>> Adding a couple of double quotes is a major problem?  If so, it seems
>> like a way more useful project making quotes optional for keys (named in a
>> specific way), like they already are in JavaScript.
>> Yeah, and of course adding support for comments.
>> Anders
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180728/258be0ad/attachment-0001.html>

More information about the es-discuss mailing list