Re: [netmod] RFC 7951 - JSON encoding of empty lists

Jack Rickard <jack.rickard@microsoft.com> Tue, 29 March 2022 18:19 UTC

Return-Path: <jack.rickard@microsoft.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 545D73A1779 for <netmod@ietfa.amsl.com>; Tue, 29 Mar 2022 11:19:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.01
X-Spam-Level:
X-Spam-Status: No, score=-2.01 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=microsoft.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aGE8-a-nivQd for <netmod@ietfa.amsl.com>; Tue, 29 Mar 2022 11:19:25 -0700 (PDT)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on0700.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0e::700]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 172433A0112 for <netmod@ietf.org>; Tue, 29 Mar 2022 11:19:24 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GYA/z/B1MmT9fTPNMl7TGkVUQj3TVS0R3GDMreBnkzojc/rDuPU4Y0DYXQbDWw7cQrRy7lGu8entns/9nZql8KaJOR0XW06hsgI7zjMS6VVJONRmSPMWlMitnWdHFobVOVy4g0pPB6hsXVzJylL9cs2H8vR+fsJ4AfrcsfAayNuuoNuIs23SiEJ4oxjRMC8zvm7gqs5yZohwqUBxHfW6ccBaluaF9bwz7qnTIItlULvsbVgI/xRziMmPOBNpN0yCt0l3n6MevrGdur3hAx+2Jj4cTo+46Fa2VqMzqsgEbhcuF6PZ0NXA3gt7JbqkRPBAm4YWFkFSfYvu86qL6trmHg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YlYHgJ0KGVCrUyPqI1w2YkguRdqfBVJ7kOiRnpRRPa4=; b=JDtXZbo6Ft+nqDw5LuibJq0alQPbhCHvKsKdq/0ywrpdz8BX3C4JIzmSkoh4tFnuCE2JUjWLaH6r7Sp3lANidD1kCmjGd10tTqCuv7ReVeLpvwO2UoU+woqfiBaItOtQpvHXPa+xU1pAlcjNL9mjIo3kb2RclJAZvN3e/0nMgT5Cd8BgBS3yk3hG1gfnm9hJRa7bg2mxL1dBgYqC597svdYM15pLCb/RS06aa99RXfuwvA9mBv9jPr/+xIWR0F68bh6sAnucA0rs8d4Q/e5psLp3+lEEa0UwpRmbrQjN1O8ZpqmZtIwLPnXvndMKnJO4ulVGYH+BW1n39uhTyo4WcQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YlYHgJ0KGVCrUyPqI1w2YkguRdqfBVJ7kOiRnpRRPa4=; b=c5lvHZQbA/Qt5Yn4twMsd1Bbf5y/weA0SehNWEpx9+XMQTH8t/gkcUbZ0I+JiU4zhRvZNG+nSjBnyssAzG4Lnl/+8C+vIsj4H7BziQjdaLVqSFJ8Ix3cxBiUmZBbDySU7BunoBrHH0/hV1Qnb3CeKvRLjGDTZJIOTGfAScW9xDE=
Received: from HE1PR83MB0378.EURPRD83.prod.outlook.com (2603:10a6:7:63::11) by VI1PR83MB0352.EURPRD83.prod.outlook.com (2603:10a6:802:3b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.2; Tue, 29 Mar 2022 18:19:19 +0000
Received: from HE1PR83MB0378.EURPRD83.prod.outlook.com ([fe80::3871:8b37:cef2:3d24]) by HE1PR83MB0378.EURPRD83.prod.outlook.com ([fe80::3871:8b37:cef2:3d24%4]) with mapi id 15.20.5123.011; Tue, 29 Mar 2022 18:19:18 +0000
From: Jack Rickard <jack.rickard@microsoft.com>
To: Kent Watsen <kent+ietf@watsen.net>
CC: "netmod@ietf.org" <netmod@ietf.org>, "mvasko@cesnet.cz" <mvasko@cesnet.cz>
Thread-Topic: [netmod] RFC 7951 - JSON encoding of empty lists
Thread-Index: AQHYQ5mBWDBbmNjGP0mSx2xLt/gZEg==
Date: Tue, 29 Mar 2022 18:19:18 +0000
Message-ID: <HE1PR83MB0378DFCEB5C60C880A56EE38881E9@HE1PR83MB0378.EURPRD83.prod.outlook.com>
References: <HE1PR83MB03785D65431C5DF40FA08FEA881E9@HE1PR83MB0378.EURPRD83.prod.outlook.com> <0100017fd6abba70-36f5982f-085f-4c24-b0cd-35e90700b495-000000@email.amazonses.com>
In-Reply-To: <0100017fd6abba70-36f5982f-085f-4c24-b0cd-35e90700b495-000000@email.amazonses.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-03-29T18:19:10.736Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard;
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 41703f08-1f19-42da-881a-08da11b0a3f2
x-ms-traffictypediagnostic: VI1PR83MB0352:EE_
x-ms-exchange-atpmessageproperties: SA|SL
x-microsoft-antispam-prvs: <VI1PR83MB03529D7678CB8B07F1B1009D881E9@VI1PR83MB0352.EURPRD83.prod.outlook.com>
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: uNQKfxdRbXYaJd7IDhK+3dc0J6aCBjC/pwprLiuQq5i/N5r1tWf2/rmPXjovkOn0AqsCcWWm0tNPSMhSEC8oZUiYeaGPZYnrc9/4zSrkOSl4TztnkrXa/K6UHJj/Wtp9pdPPfMulT/JBGRHto7HwCFx94QfirvlcsoT8kqsngz7zXZT39ZFFstgXaE5aOtC5ED19IBYUcJ3O8RdtlJrVECqZ0knHDUaeiX6ff6Z5MpOKJOlkxaR4b3MGzg1aEihO3PmqSqIsbkLaljuhdsVA8fV+dWRzodA+/ZHN475r3hIb8JZKgJu05Jn7MGnEL+7o80AThx6KMX7Za+wsLMH1HBnW756U2q/KCkBPCM5Nc2Bc4fhZCD3eBNNJtNiGb9P/1yfoY2xujlh1/PImbODHBIrBCiP+lnTU5oyze7d1boiJspL4OxOF6Ahy9w+/m/An1dJIHNo0ulhE3HqqoUjDfheqdh8/T1aJxL+QgvApryTl2XgNd7Tv4FnsPcmVUs4nSKoy8hGfvAch+cZPFPDapoO6puUKGMNHnPXKFCtoHPNULQz3PPwUwxxB03Ck5svA9n+KQTKwoCKUvlh3gsgotT11hRZTc0YYLTDhrPahaUhcITrZLUWgIKR/pvKIIMRSGNQBcrfi1HuUmmIgiK5+Ouk/KNCzjVXeo2kL3829d4JXDuIjo1cOBEbFqop08Te5OVyKvwu4ALh7DppUOB4CeUZdiXEQxvlWPRR/GWoNhTMsQgeeHuEmC/EnjFxRCL5wC3e0JUtpKiJr5FEMak9Ztb4c9vBYTdLKdr2iNGOmz9SGTORwEwgV38XpJi3ymZjB1nKHKQUPJXOIaBiDUErYrw==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:HE1PR83MB0378.EURPRD83.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(451199009)(8936002)(66476007)(64756008)(66556008)(38070700005)(66946007)(19627405001)(122000001)(8676002)(4326008)(508600001)(55016003)(66446008)(76116006)(10290500003)(86362001)(5660300002)(966005)(91956017)(9686003)(2906002)(316002)(82950400001)(6506007)(83380400001)(44832011)(26005)(166002)(33656002)(54906003)(52536014)(71200400001)(53546011)(82960400001)(8990500004)(186003)(38100700002)(7696005); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: M+Z27tqJCPfDmaNuCPyAV3k48HsBKqQXl3uCz2e/BK2+szbXeJ+o0hozT659uiPaY9+hCiLdUFL/qtU0fdAAYkkls2flJm1fuo97S2gWI77HLu1Ty58MH9yPsRXwU36yTA7rxBnAxCVQhwTNaOF9SU+IRkkZpGvUEP80ULCe5Wo4Z+4N9Lp6vCdMfS9KPN/Olg9giLow9wYgQzLb7vOHNMjTPY85+HDiYI7XLut++t6dQCKFt1bPDkKJj5rdjDpjRwEGHIrNSLnELsI9DV6gH/Qnr0VrzqbRB/JuQj/lEHlwJHikw15Q2LmFu7l5P/tp+exNsJy8UKsGVQBXXW4pEeRqVjtE6eAjkpZM+UaJItClv8lD7h/o1gXf09zvYp9tYFd2pT1gfTno5ewJ7IxjmPtjOOSbK8HG+xsVbXr2CNcGAobTFf8nP1m3VUsCwP7Z06ndf/JeXEaxh2hn+yUIq71wTJN5mMWlVI8dM/C4bQy72ZxOLegvIgKc5/4il+HgvKD3gfCdEWVq7AMq2qjBm7pQxwueN9hwsBTPMbUoG1uVK/EU40cgaOXjjXz1eRJPI3FJ3eL+BPhBezFNITLKZ3uBaKBY+kyB8phyxkJ1v49Sn+uo1+EWjavgJiOkqQ2DFY2aYon0f4J/Or0wt6RfjMfLH/LGdwHaXfR2ozJVqEiBZ/yIhPO+q5An54m260k6D4JlcNw4f19p8oqIe3QCxf3Gxhl3ZrHT5xYPTIQWPZo70a6lSRZ8578c5J9OTtEhAJH45cMDbJ4G5VoHQEsGVpDWkbzgrtwwkjjO5Rl43YxVelGcVAWM+7Iz6LLQY3a/yt0FspJFAsUr+bEKLDGpG3DnpD4sJF9xyxk4tnEKepQ5oGp+XvtUVrGxRT7oDO5C+dWXrkMcEdKQIZ6a8PJIAgTo/NOdG/I7qXQS+8zw8ccwfeeNjj3Nwth78ETz9j37nWXhVY/AbI6BYPYaA9yJuW38CTJw0/8XVwazi5vIAgIgZcFuQQ5+vtbmmQaKQJ3X3Jnz3IioxrSWhchU9yarR1fkLbbVeCbgloNs2ApHZevS7SHyR/BEG0bS/AnYLbaSObQmZXFS9gpX56cDAjX8JOCQ1xtyWJbTHAy4G3a+LWU/ZU97pMF2BFOW4I98hNEfF0/gPRX91gFkH3alDUKMZwCSVZG55F4gGeZGMaBZoKFQCflXW1uLQ5so/JbaxKB6vk9WQEqd+PbtwnO/LEYdjsmszsJ006tWcxR76aDBMCaW+1p934nmYx/T/LTgR9K8JtYLnCwxscSIbxS6ZWIwOoiDYaf+GKuj2y2Oi0H7oIPVw/k46K0uulEXVhMyOw6xMcPpVGmzYOjLmHYvk1TyCeX0/Hd0rmFBCmzCudZ9VAN10fpxr17ipztEwj6j3tl6zNxkREJfLN62NZagIsTsVgpdDYiKIAT2JoulUT5xBE7Lx1lnyKaSNrEOfdySIixnHlhJcwcB7d4ZnYSgBf0lQt9y0sv4DLFgeOGikk3DRX9mnjDWa1VBY0Ycx/Q5d6XLuX3nbKxWsQ+ftd3Lz0tGQKbA7vUXyKiIEtO6XxSOINOXEPbLi/eItK37MK1sWRSFZQzqySwtxljP6zVQOq8G2q1S1yFFexgnrOeLEzVbRRJmtVkPOMBGcX9d70Glz/Un73T7fbu3P88lHdzQigQd2w==
Content-Type: multipart/alternative; boundary="_000_HE1PR83MB0378DFCEB5C60C880A56EE38881E9HE1PR83MB0378EURP_"
MIME-Version: 1.0
X-OriginatorOrg: microsoft.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: HE1PR83MB0378.EURPRD83.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 41703f08-1f19-42da-881a-08da11b0a3f2
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Mar 2022 18:19:18.6143 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Tk3xiU/1erZVXXVRb1rqKpdjZukHFx1BfLuL/9wxyQr8OKMuiUeqAKx/OHc0cDVr1jaXy3pRbEDyt6xNHfahxLVIm101PS3OpjSJy9jg+Ao=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR83MB0352
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/5FjZUYJ6za3wfnquXRh4elxkBRg>
Subject: Re: [netmod] RFC 7951 - JSON encoding of empty lists
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 29 Mar 2022 18:19:31 -0000

Hi Kent,

Thanks very much for the response. However, I'm slightly worried you've misunderstood my examples, and as I've been fighting in the #1 corner I want to make sure I give #2 a fair chance.

Given this schema:
module test {
  prefix "test";
  namespace "urn:test";

  container test {
    leaf foo {type string;}
    leaf-list bar {type string;}
    leaf baz {type string;}
  }
}

Is this valid (#1):
{
        "test:test": {
                "foo": "test1",
                "bar": [],
                "baz": "test2"
        }
}

and is this valid (#2):
{
        "test:test": {
                "foo": "test1",
                "baz": "test2"
        }
}

To make sure I didn't miss something I verified this with yanglint 0.16.105 (what ubuntu gave me), and that accepts #2 but not #1 (it rejects #1 with err : Invalid JSON data (unexpected value). (/test:test/bar)).
To be really clear this is accepted:
{
        "test:test": {
                "foo": "test1",
                "bar": ["test3"],
                "baz": "test2"
        }
}

Thanks,
Jack

________________________________
From: Kent Watsen <kent+ietf@watsen.net>
Sent: 29 March 2022 18:14
To: Jack Rickard <jack.rickard@microsoft.com>
Cc: draft-ietf-netmod-yang-json@ietf.org <draft-ietf-netmod-yang-json@ietf.org>; netmod@ietf.org <netmod@ietf.org>
Subject: Re: [netmod] RFC 7951 - JSON encoding of empty lists

#1 is an empty list (or leaf-list).  This is what you want.

#2 is a list containing one element, which is an empty container (or, in Python term's, an empty 'dict').

Yanglint 1.x used to accept #1, kinks are being worked out on the 2.x branch.

Kent // contributor


On Mar 29, 2022, at 10:21 AM, Jack Rickard <jack.rickard=40microsoft.com@dmarc.ietf.org<mailto:jack.rickard=40microsoft.com@dmarc.ietf.org>> wrote:

Hi,

I think I’ve found an ambiguity in RFC 7951, and I’d like your input on what was intended and what the best behaviour to exhibit is.

Section 5.3 and 5.4 of RFC 7951 - JSON Encoding of Data Modeled with YANG (ietf.org)<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc7951%23section-5.3&data=04%7C01%7Cjack.rickard%40microsoft.com%7Ca33f2d22f70f4de7a87808da11a79ae4%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637841709447361395%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=2jqJW1VVJyft9CVC3T5xCgXvlt4Zsd7c7mdtBrKSpdM%3D&reserved=0> describe the encoding of leaf-lists and lists, however it’s unclear how an empty list should be encoded. Should it be encoded as:

  1.  An empty array: {“list”: []}
  2.  A missing field: {}


I’ve seen libraries go either way, libyang only accepts 2 but the python yangson library accepts both (I’m not sure which is the default).

Thanks,
Jack Rickard
he/him
Software Engineer
jack.rickard@microsoft.com<mailto:jack.rickard@microsoft.com>

<image001.png>


_______________________________________________
netmod mailing list
netmod@ietf.org<mailto:netmod@ietf.org>
https://www.ietf.org/mailman/listinfo/netmod<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Fnetmod&data=04%7C01%7Cjack.rickard%40microsoft.com%7Ca33f2d22f70f4de7a87808da11a79ae4%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637841709447361395%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=RJxmETMYeLjdtqejd%2BsfV6jkjjAuQAxZ%2FeQkf14lZT0%3D&reserved=0>