On 2018-03-19 08:23, Michał Wadas wrote:
It's workaround.

I forgot to mention that if you overload the "Number" type with int64's, 
BigNum's, BigInt's etc. you will need a mapping scheme so that the parser knows what to 
look for and create.
OTOH, mapping from a string literal using the replacer already have what it 
takes.

Right, this won't work for the people who had to write their own JSON tools due to 
limitations in "Number".

Anders


JSON.parse can't properly parse valid JSON subset.

ZIP codes are not part of JSON specification, arbitrary precision numbers are 
(and JSONs with 64-bit ints are widely used).

Modyfing schema is possible only if you control it and control all of its 
consumers.

BigInt proposal already cover serialisation part.

On Mon, 19 Mar 2018, 08:11 Anders Rundgren, <[email protected] 
<mailto:[email protected]>> wrote:

    On 2018-03-19 07:32, Michał Wadas wrote:
     > Yeah, there are workarounds for passing bigints.
     >
     > Unfortunately, it's workaround, and it doesn't solve the problem -
     > certain valid JSONs can't be properly used in ECMAScript without writing 
JSON parser in user land.

    Hi Michal,

    I wouldn't call it a workaround.

    The idea that there must be a native data type in a message format for each 
data type you can come up with has huge real-world limitations.  Physical 
address descriptors (street, zip, state, etc), don't have native JSON 
counterpart either to take a fully valid example from another application area.

    Using an external (with respect to the parser), mapping schema [1,2] 
addresses these problems in a fully universal and extensible manner.
    toJSON seems to do a good job in the other direction.

    The importance of JSON "Number" is exaggerated.  In the systems I work with 
(Payments), you hardly find a single instance of "Number".  No, it doesn't even work for 
expressing money!

    Anders

    1] Ultra simple/manual: new BigNum(obj.sizeOfTheUniverseInCubicMeters);
    2] Sophisticated: JSON.parseWithSchema(schema, jsonData);

     >
     > On Mon, 19 Mar 2018, 03:33 Anders Rundgren, <[email protected] 
<mailto:[email protected]> <mailto:[email protected] 
<mailto:[email protected]>>> wrote:
     >
     >     On 2018-03-19 02:37, Anders Rundgren wrote:
     >      > On 2018-03-19 02:33, Michał Wadas wrote:
     >      >> Fact: JSON allows arbitrary precision numbers.
     >      >> Problem: JavaScript is unable to express these numbers.
     >      >>
     >      >> Proposed solution: introduce JSON.safeParse. This method will 
work as JSON.parse, but throwing on values that can't be accurately represented by IEEE 
754 64-bit float.
     >      >>
     >      >> Alternative: allow user to specify number class - eg. by adding options 
object with optional method "parseNumber", overwriting default behaviour of using 
builtin number type.
     >      >>
     >      >> Any thoughts on this?
     >      >
     >      > Yes, it is a SUPERBAD idea.
     >
     >     Pardon my unnecessary dismissive response. A more constructive 
response would be:
     >
     >     This is "approximately" the de-facto standard for dealing with 
BigNums and tons of other non-standard types.
     >
     >     var obj = JSON.parse("JSON formatted data");
     >     var val = new BigNum(obj.sizeOfTheUniverseInCubicMeters);
     >
     >     JSON on the wire:
     >     {
     >         "sizeOfTheUniverseInCubicMeters": 
"3.45e+445454545454545776767676676"
     >     }
     >
     >     When TC-39 introduces BigNums in ES, this is the most likely way 
they will address this particular aspect.
     >
     >     Anders
     >
     >
     >      >
     >      > Anders
     >      >
     >      >>
     >      >> _______________________________________________
     >      >> es-discuss mailing list
     >      >> [email protected] <mailto:[email protected]> 
<mailto:[email protected] <mailto:[email protected]>>
     >      >> https://mail.mozilla.org/listinfo/es-discuss
     >      >>
     >      >
     >


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to