Re: [Json] JSON and int64s - any change in current best practice since I-JSON
Rob Sayre <sayrer@gmail.com> Tue, 16 January 2024 17:10 UTC
Return-Path: <sayrer@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 68EB5C14F710 for <json@ietfa.amsl.com>; Tue, 16 Jan 2024 09:10:41 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.104
X-Spam-Level:
X-Spam-Status: No, score=-2.104 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_BLOCKED=0.001, 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 5Mrk0KWZi4ZS for <json@ietfa.amsl.com>; Tue, 16 Jan 2024 09:10:36 -0800 (PST)
Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) (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 C2970C14F5F6 for <json@ietf.org>; Tue, 16 Jan 2024 09:09:21 -0800 (PST)
Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-50e7b273352so11158201e87.1 for <json@ietf.org>; Tue, 16 Jan 2024 09:09:21 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705424960; x=1706029760; 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=NHS33vkAEnN/nw21145mKcvcxDIrwOsTfKkDl4fMkxI=; b=EKENnUg1Z0kFsH/Vo0zmtXYocvTJaESxIqVZQuOvi7puY0mRxjaDcNEMHUBZ6ClsIE mo7Bnb3O33XqZclVsrvo0GYCQ5jbeg2oWoDBvX43n2kIhlkoJy2Z5B8aHZrIg2uNCFuy f/ZINKpH0OY86070RpqfQQpaZHSdi/8YgWeTGu2aD65RZ7G9rHX9zqD9rs2D/oMQFKpl UMlCUZ2OSw9gGej02Vb9lWjGFtpHpD8/xEV5m7p4PB+Q0VdlWgUkpbSgt5tEQEzuX6Sh FXVM4AAKcF8zAPh+i8AhgLmyNJ835/a5P1qIcBm6eLcy/1kJrTFBEZpyS2OU3H9u+8/f 7eQw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705424960; x=1706029760; 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=NHS33vkAEnN/nw21145mKcvcxDIrwOsTfKkDl4fMkxI=; b=Yfrbn0zTyp6me8341OMkExctJohhxoTiuEgrUCzebhoem0UHp1s+s5SEy/Ue2L8NuI /tm+qKN9Wtytrbot32NNs5qwylBBd1N3qUXQZ+mN9RA9yTLhGII1HX90+wzyOyrHuieJ 4FRwkrtYjSTBM7GPXdib6+Vb6qigRHGKkz8tr9PWeBC6LJrXwWpooLS22zwVW22aAKnz dlbbNp/8t9QrMlL9rAClwVyF4hx1k6ZkYksAz3bBKgc2PHtv2lgnkbhQSfBm8bqdDDZp 2wIgy0t61mzh0A5mzaeURzx4AU4gF5tV0IgoCPMaF2cjPvEdIN64kaeCLogxo6q3p7sQ Gguw==
X-Gm-Message-State: AOJu0Yyk0J4W+cGG4eJ2lRKtSY7ZNrub4Eb+BQHE8Ce5pn8nV7P3iuLU sdhD26xQ10RVZBIU18X9H9iBwmtkTBzZo6pJfxLGl2Ay2M0=
X-Google-Smtp-Source: AGHT+IEKfENksmlE9eK9AMJKubWJqgezFwknW22Xk5kTz2lTormKoFrBOOhbhUzq6BOwIw+rUHC1t7z4PM2kzoKesTY=
X-Received: by 2002:a05:6512:1323:b0:50e:b3ed:f4fb with SMTP id x35-20020a056512132300b0050eb3edf4fbmr4525302lfu.15.1705424959303; Tue, 16 Jan 2024 09:09:19 -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>
In-Reply-To: <CAHBU6it4SaLawSiBgK9ySkbxjtHE6CX-P3r=hzcVy4ksoQo-Cg@mail.gmail.com>
From: Rob Sayre <sayrer@gmail.com>
Date: Tue, 16 Jan 2024 09:09:07 -0800
Message-ID: <CAChr6SxHfLW-A1asAndKJz-AiyJv5QP18bi=_bNdKXw7zYHThw@mail.gmail.com>
To: Tim Bray <tbray@textuality.com>
Cc: Carsten Bormann <cabo@tzi.org>, "json@ietf.org" <json@ietf.org>, Pete Cordell <petejson@codalogic.com>
Content-Type: multipart/alternative; boundary="000000000000e3f499060f133097"
Archived-At: <https://mailarchive.ietf.org/arch/msg/json/Z3rafPJZ0QD3q3CRrgs6-pkEPc0>
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: Tue, 16 Jan 2024 17:10:41 -0000
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] JSON and int64s - any change in current be… Pete Cordell
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Tim Bray
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Tim Bray
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Pete Cordell
- Re: [Json] JSON and int64s - any change in curren… Pete Cordell
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Tim Bray
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Anders Rundgren
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Tim Bray
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Tim Bray
- Re: [Json] JSON and int64s - any change in curren… Daniel P
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Tim Bray
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] [Cbor] JSON and int64s - any change in… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Richard Gibson
- Re: [Json] [Cbor] JSON and int64s - any change in… Jeremy O'Donoghue
- Re: [Json] [Cbor] JSON and int64s - any change in… Carsten Bormann
- Re: [Json] [Cbor] JSON and int64s - any change in… Jeremy O'Donoghue
- Re: [Json] JSON and int64s - any change in curren… Joe Hildebrand
- Re: [Json] [Cbor] JSON and int64s - any change in… Carsten Bormann
- Re: [Json] JSON and int64s - any change in curren… Rob Sayre
- Re: [Json] [Cbor] JSON and int64s - any change in… Jeremy O'Donoghue