I like the idea, but I don't feel it's *quite* as simple as as just
adding an option for serializing BigInts/numbers as explicit
integers/floats.

-----

Isiah Meadows
[email protected]
www.isiahmeadows.com

On Tue, Aug 14, 2018 at 2:31 PM Michael Theriot
<[email protected]> wrote:
>
> I've been brainstorming a few days and this is the same idea I reached. I 
> just wasn't sure if returning some kind of special object (JSON.Fragment) was 
> a good way to handle stringify.
>
> Elaborating, basically a third argument would come back in JSON.parse reviver 
> method, which is the actual string that was parsed (not the parsed value). 
> When stringifying, a JSON.Fragment would not get parsed but inserts the 
> underlying string value (which must be valid JSON).
>
> JSON.Fragment would just be a way to use valid, raw strings in JSON. E.g.
> JSON.stringify([0]) === JSON.stringify(JSON.Fragment("[0]")
>
> On Tuesday, August 14, 2018, Michał Wadas <[email protected]> wrote:
>>
>> Personally, I would like to see:
>> - third argument to JSON.parse reviver, "raw string"
>> - new class JSON.Fragment accepting any syntactically valid JSON in 
>> constructor (eg. new JSON.Fragment('99999999999999999')
>> - returning JSON.Fragment from JSON.stringify would paste it as-it-is into 
>> string output
>>
>> This should cover any Bigint use case without breaking backward 
>> compatibility.
>>
>> On Tue, 14 Aug 2018, 07:57 Anders Rundgren, <[email protected]> 
>> wrote:
>>>
>>> On 2018-08-14 06:55, J Decker wrote:
>>> > my primary usage of json is
>>> > https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#Using_JSON_to_transmit_objects
>>> >
>>> > in which case JSON.parse( JSON.strinigfy( msg ) ) really needs to result 
>>> > in the same sort of thing as the input; although I guess dates do get 
>>> > lost in translation anyway, but they could be handled as numbers with a 
>>> > few more character exceptions ':','-'(in a number),'Z',' ' the last one 
>>> > (the space) complicating the whole thing immensely; there is no meaning 
>>> > of multiple numbers without a ',' between them in JSON, so maybe not so 
>>> > impossible.
>>> >
>>> > and given the requirement that seems to be lost, that bigints ONLY 
>>> > interop with bigints, they MUST decode the same as their encoding; the 
>>> > JSONnumber type almost works; but requires custom code every time bigints 
>>> > are used. (much like dates)
>>> >
>>> > what writing a JSON parser taught me, is the type of a variable is the 
>>> > type of the data it has; and JSON does a really good job of representing 
>>> > 99% of generally communicated types. which makes generic code quite 
>>> > easy... without having to respecify/recast the data, the data is already 
>>> > the type it is.
>>>
>>> Since the JSON standard doesn't distinguish between a single bit or 
>>> BigNumber, I guess you are proposing extensions to JSON?
>>>
>>>
>>> > but there's certainly fewer of me, than of those that thing everything is 
>>> > perfectly fine, and shouldn't evolve as the langugage has.
>>> > but then there's 'don't break the net' and 'this could certainy break the 
>>> > net'; but since bigints didn't exist before, I guess they shouldn't be 
>>> > added now, because sending them to old code would break  the old code.... 
>>> > but actually since being added; should also update JSON to support that 
>>> > number type (although I guess base JSON doesn't suppose ES6 number 
>>> > encodings like 0x, 0b, etc...)
>>> >
>>> > and again, since bigints ONLY interop with other bigints, there should be 
>>> > no chance they will get lost in interpretation.
>>> >
>>> > can see JSONnumber can aid application handling; but if you send bigints 
>>> > to an application that doesn't support bigints it's not going to work 
>>> > anyway; so why not just let existing json.parse throw when it doens't 
>>> > have bigint support?
>>>
>>> The proposal is targeting *cross-platform applications* using JSON.  The 
>>> only thing it adds is offering a way to use JSON Number formatting for new 
>>> numeric types, in addition to the quoting schemes which already are fully 
>>> supported (and extensively used as well).
>>>
>>> Example: A java class element like `BigInteger big;` used in a JSON context 
>>> presumes that all values targeting "big" should be treated as BigIntger 
>>> (=BigInt).  However, there are different practices for formatting 
>>> BigIntegers in JSON and they are all "right" :-)
>>>
>>> In essence, the proposal's only ambition is making the ES6 JSON object 
>>> better aligned with an already established JSON reality.
>>>
>>> Anders
>>>
>>> > On Mon, Aug 13, 2018 at 12:33 AM Anders Rundgren 
>>> > <[email protected] <mailto:[email protected]>> 
>>> > wrote:
>>> >
>>> >     For good or for worse I have written a proposal for 
>>> > https://github.com/tc39/proposal-bigint/issues/162
>>> >     available at 
>>> > https://github.com/cyberphone/es6-bigint-json-support#json-support-for-bigint-in-es6
>>> >
>>> >     Since the proposal doesn't introduce a default serialization mode, I 
>>> > guess nobody will be happy :-(
>>> >     OTOH, a fairly decent rationale for not specifying a default is also 
>>> > provided :-)
>>> >     This comment is also worth reading: 
>>> > https://github.com/tc39/proposal-bigint/issues/162#issuecomment-409700859
>>> >
>>> >
>>> >     Cheers,
>>> >     Anders
>>> >     _______________________________________________
>>> >     es-discuss mailing list
>>> >     [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
>>> >
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> [email protected]
>>> https://mail.mozilla.org/listinfo/es-discuss
>
> _______________________________________________
> es-discuss mailing list
> [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