Re: [Json] JSON and int64s - any change in current best practice since I-JSON

Richard Gibson <richard.gibson@gmail.com> Wed, 17 January 2024 19:07 UTC

Return-Path: <richard.gibson@gmail.com>
X-Original-To: json@ietfa.amsl.com
Delivered-To: json@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 20DFDC18DB98 for <json@ietfa.amsl.com>; Wed, 17 Jan 2024 11:07:34 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.105
X-Spam-Level:
X-Spam-Status: No, score=-2.105 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 88tYT-bA124d for <json@ietfa.amsl.com>; Wed, 17 Jan 2024 11:07:33 -0800 (PST)
Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6AA70C15108A for <json@ietf.org>; Wed, 17 Jan 2024 11:07:33 -0800 (PST)
Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1d50d0c98c3so83677175ad.1 for <json@ietf.org>; Wed, 17 Jan 2024 11:07:33 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705518453; x=1706123253; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nU8CWXw+H+YLIhfn91iKx3VwL7UpQqmB1MPfRy0kliI=; b=JYoAB9v39Mia/V0rV099PaQK8b8jmPaqsqr2ZocQslyKXaobinLnqarTcGp0cWMPeG neXFMLi1lljqxwOO84sUKqXxvjYt5N/DtIwjCBy8ONSrlSJHYiYXTSFXPns6KJV5l5o7 R2hPESvFPpVXQuelTqG/hzLDLWbGm9JBi+RNy5cFqxveiLYXCpWRUb/ZsV8tZiodLwL1 RQF8SI2lC12M+ny4LGeS+N1u+rbrHxUNfg/hCAS8tHYYXmloQjNGTtqqO1NeWEInjY6a Uk+gO67HqjikuwwjdmFXhMehthpFiN84jefodennz+SdM5z0dxkO/d0ONwwiMgg4w3zA NCdg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705518453; x=1706123253; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nU8CWXw+H+YLIhfn91iKx3VwL7UpQqmB1MPfRy0kliI=; b=qQRFjjODTjvgnsrm1kZS28LCkz0bJgYYZNO96ZZYbGTXAHVy34qp/Fc+xosRyq2D8e Ok20fdjQrzlQp9dp7TaVt4RTm6dAex3s+5JIgxzNg9l4OA7fCuO6FweDGzJSG78m1gzv SeKDtyY3MsBXEU2y5XFPJrIKpQ/GvsQOuLGzFQiWTJujV4N41K3yGLL0bChi2+3AeeXq oNW2607KQM/FB5L79f2j8SxoShh6vwjR/4hKwRceptoradilRL53fso/mi4uvwd5rCe2 ZTtsl1MPVwln73IjWPFB643EQi4nYsSXc4goJ2UAROgukfMLUg8/3QcjdoKdgcrqInem eOEw==
X-Gm-Message-State: AOJu0Yw708BDYkQhEjGXuaqqlHZ5OaqJUcwUg63KR5xzEFvYABiR3SnM wH95syhsJtXuPj3rLuvPSgMNY/4qBOWufhX1PU6oQ7gXIGs=
X-Google-Smtp-Source: AGHT+IHOx1A19JVGowfJEUVlqhZnIBVMd48cp2cV1oxqRi6NiRgrUqqua4Pu77MY18b2hNEzHyQvF3LVcVAuwN6zduc=
X-Received: by 2002:a17:902:e5ca:b0:1d4:5e25:7fc3 with SMTP id u10-20020a170902e5ca00b001d45e257fc3mr2045771plf.36.1705518452653; Wed, 17 Jan 2024 11:07:32 -0800 (PST)
MIME-Version: 1.0
References: <87527a42-aaac-4f39-b320-05f18a2808c1@codalogic.com> <C31BF4C8-9E6C-48F8-BF7B-D2C379273B3F@tzi.org> <CAHBU6it4SaLawSiBgK9ySkbxjtHE6CX-P3r=hzcVy4ksoQo-Cg@mail.gmail.com> <CAChr6SxHfLW-A1asAndKJz-AiyJv5QP18bi=_bNdKXw7zYHThw@mail.gmail.com>
In-Reply-To: <CAChr6SxHfLW-A1asAndKJz-AiyJv5QP18bi=_bNdKXw7zYHThw@mail.gmail.com>
From: Richard Gibson <richard.gibson@gmail.com>
Date: Wed, 17 Jan 2024 14:07:21 -0500
Message-ID: <CALH+fvrZRY2QBs7qdJj28uBC=5iVNW0=Fr0++qT-6YzXjEzvyA@mail.gmail.com>
To: Rob Sayre <sayrer@gmail.com>
Cc: Tim Bray <tbray@textuality.com>, Carsten Bormann <cabo@tzi.org>, "json@ietf.org" <json@ietf.org>, Pete Cordell <petejson@codalogic.com>
Content-Type: multipart/alternative; boundary="0000000000008743ec060f28f578"
Archived-At: <https://mailarchive.ietf.org/arch/msg/json/RvjamIrM0EUosZ2iD3s2lw-_wzE>
Subject: Re: [Json] JSON and int64s - any change in current best practice since I-JSON
X-BeenThere: json@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: "JavaScript Object Notation \(JSON\) WG mailing list" <json.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/json>, <mailto:json-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/json/>
List-Post: <mailto:json@ietf.org>
List-Help: <mailto:json-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/json>, <mailto:json-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 17 Jan 2024 19:07:34 -0000

When it advances sometime this year,
https://github.com/tc39/proposal-json-parse-with-source will address the
inability to represent and interact with integers outside of the IEEE 754
binary range in browsers and other ECMAScript implementations.

On Tue, Jan 16, 2024 at 12:10 PM Rob Sayre <sayrer@gmail.com> wrote:

> Hi,
>
> I had the same thought as Pete a while back, but found that JS engines
> actually bar you from encoding these as JSON:
>
> > let two_55th = BigInt(2) ** BigInt(55)
> > two_55th
> 36028797018963968n
> > JSON.stringify(two_55th)
> VM189:1 Uncaught TypeError: Do not know how to serialize a BigInt
>     at JSON.stringify (<anonymous>)
>     at <anonymous>:1:6
>
> I can't find the reference for this one, but the reason they gave was that
> /adding/ support broke too much running code, even though it would be easy
> to add, since the second command there sure does stringify that number.
>
> I think the issue was that too many programs rely on JSON.parse returning
> a JavaScript Number type (distinct from BigInt), so you'll run into
> problems like this TypeError:
>
> > let my_plain_number = JSON.parse("42")
> > my_plain_number
> 42
> > my_plain_number + two_55th
> VM429:1 Uncaught TypeError: Cannot mix BigInt and other types, use
> explicit conversions
>     at <anonymous>:1:17
>
> So, I-JSON remains correct.
>
> thanks,
> Rob
>
>
> On Tue, Jan 16, 2024 at 7:11 AM Tim Bray <tbray@textuality.com> wrote:
>
>> Carsten is right. You probably wouldn’t use JSON if you weren’t likely to
>> be interchanging it with other parties over the network, other parties you
>> don’t control.  For quite a while, it has been quite likely that the other
>> parties use JavaScript, and the limits I-JSON places on numbers are a
>> result of this fact. This fact isn’t going away AFAIK.
>>
>> On Jan 16, 2024 at 6:22:31 AM, Carsten Bormann <cabo@tzi.org> wrote:
>>
>>> Hi Pete,
>>>
>>> On 2024-01-16, at 14:46, Pete Cordell <petejson@codalogic.com> wrote:
>>>
>>>
>>> Hi All,
>>>
>>>
>>> In I-JSON it recommends encoding 64-bit values using a string because
>>> many parsers (in particular browsers) always represent numbers using
>>> floating point doubles.
>>>
>>>
>>> (many parsers == JavaScript’s JSON.parse)
>>>
>>> We're over 8 years on from I-JSON and browsers now support things like
>>> BigInt.
>>>
>>>
>>> I’d say the problem wasn’t so much the absence of BigInt, but the fact
>>> that JavaScript’s JSON.parse always parses JSON numbers as a JavaScript
>>> Number, which is exact only inside (-2**53, 2**53).
>>>
>>> Therefore, I'd be interested to hear if there is any community change of
>>> opinion on how 64-bit ints should be handled in JSON.
>>>
>>>
>>> I think we’d first need wide support for a new equivalent to JSON.parse
>>> in JavaScript.
>>>
>>> Grüße, Carsten
>>>
>>> _______________________________________________
>>> json mailing list
>>> json@ietf.org
>>> https://www.ietf.org/mailman/listinfo/json
>>>
>> _______________________________________________
>> json mailing list
>> json@ietf.org
>> https://www.ietf.org/mailman/listinfo/json
>>
> _______________________________________________
> json mailing list
> json@ietf.org
> https://www.ietf.org/mailman/listinfo/json
>