From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Yoichi Nakayama Newsgroups: gmane.emacs.bugs Subject: bug#24252: 25.1; json.el doesn't distinguish null and empty object Date: Sun, 21 Aug 2016 10:30:25 +0900 Message-ID: References: <0e859022-309d-576d-62ea-acaddb10a0c2@yandex.ru> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Trace: blaine.gmane.org 1471743079 23437 195.159.176.226 (21 Aug 2016 01:31:19 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 21 Aug 2016 01:31:19 +0000 (UTC) Cc: 24252@debbugs.gnu.org To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Aug 21 03:31:15 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bbHbX-0005pB-3C for geb-bug-gnu-emacs@m.gmane.org; Sun, 21 Aug 2016 03:31:15 +0200 Original-Received: from localhost ([::1]:34819 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbHbU-00069U-AK for geb-bug-gnu-emacs@m.gmane.org; Sat, 20 Aug 2016 21:31:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46347) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbHbO-00068K-B8 for bug-gnu-emacs@gnu.org; Sat, 20 Aug 2016 21:31:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bbHbJ-0002JY-Va for bug-gnu-emacs@gnu.org; Sat, 20 Aug 2016 21:31:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:37728) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbHbJ-0002JU-Ra for bug-gnu-emacs@gnu.org; Sat, 20 Aug 2016 21:31:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1bbHbJ-0006OU-K5 for bug-gnu-emacs@gnu.org; Sat, 20 Aug 2016 21:31:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Yoichi Nakayama Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 21 Aug 2016 01:31:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24252 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 24252-submit@debbugs.gnu.org id=B24252.147174303224538 (code B ref 24252); Sun, 21 Aug 2016 01:31:01 +0000 Original-Received: (at 24252) by debbugs.gnu.org; 21 Aug 2016 01:30:32 +0000 Original-Received: from localhost ([127.0.0.1]:35440 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bbHaq-0006Ni-Ik for submit@debbugs.gnu.org; Sat, 20 Aug 2016 21:30:32 -0400 Original-Received: from mail-it0-f44.google.com ([209.85.214.44]:36853) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bbHap-0006NT-5I for 24252@debbugs.gnu.org; Sat, 20 Aug 2016 21:30:31 -0400 Original-Received: by mail-it0-f44.google.com with SMTP id e63so60564105ith.1 for <24252@debbugs.gnu.org>; Sat, 20 Aug 2016 18:30:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ztlNH3MoNrY9M1wdX6vnR2PTIkH2zNicbT/3ITMf/VM=; b=FBGB5pJfLu2HflynJgWzJVpn9P4GNUFBYWDJkR8ORFfKYZgkvO6bQj77fIXbmhMBhi ZLu8tyz1eQ7YtN3wYdREbDC2xzSYOW6dQ4nNXGxs62iX+rUhx1UHF6JAntNwqhwJJ1Xs rf+SKBMPmoRxspgKtryTCy3o44INJ1fh1VFdfVVnse8D5uCEf++Ey3krTDyp9iKNIw65 DYxJncrCA05/9S4mb44KGYcIjo1vSHHCkbX1yN5ZqLJO4m9L1ql4FO6L4B+lnMO3377K n1uyMUVmjNzUUtE4bEamaRBhwFYpb++l9KkQGI/sYWWuOoB7iRGNWaBut/cXLhwmmBef WYsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ztlNH3MoNrY9M1wdX6vnR2PTIkH2zNicbT/3ITMf/VM=; b=Xx0Y2TsNJkljH8Z8pTQUmdbPlLvTmZooQR7GMyoywhoP8dM0itOzPOKv7ZZtaZPB/a NK38k062V6sCDWTgLF8cJBUhMGBi2+ixLrgScWbN6ghaIPVi3y10+BqvQ/iMPI5xnigq +7eIxISHqAXBkTD7MsSnD/wqK71S0V5hwHYChBG9B4wfX0RNTjmGpAaAfrRkmuZhzQyg JBJmzXFDc6dKfuIhu9V8Pg24grzh3/VBjFaM6Sln49QDV6GCY35ZT79ISZvAQ/42AfgN 5AsN9v5ax1ZjxP0Dt/UfE5E02FFEi116buOWiHSVO6O0I4zkgo0vebYxZDHZ4hHltQvC kXgw== X-Gm-Message-State: AEkoousyemkQHiyn7DE+6PcHyL7Kz2Nf/BDI5wSJCUGUssHpRnE6+wgxwuom9Vms9RGLyxp/5OlL0a/UTNaztA== X-Received: by 10.36.107.82 with SMTP id v79mr13548324itc.52.1471743025589; Sat, 20 Aug 2016 18:30:25 -0700 (PDT) Original-Received: by 10.107.3.18 with HTTP; Sat, 20 Aug 2016 18:30:25 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:122441 Archived-At: The second patch dosn't work with some cases. Applying json-pretty-print to {":json-null": 1} cause error "Bad JSON object key: :json-null". On Sat, Aug 20, 2016 at 3:12 PM, Yoichi Nakayama wrote: >> Maybe the fix could be in json-pretty-print. > > I agree that json-pretty-print should be responsible to the issue. > But I think > > (let ((json-null 'NULL)) (json-encode (json-read-from-string "{}"))) > > is also a bug. > How about the following patch? > > From 24a11fc81ea283c7f999bbcf87ea0f2c01c1c24e Mon Sep 17 00:00:00 2001 > From: Yoichi Nakayama > Date: Sat, 20 Aug 2016 15:00:28 +0900 > Subject: [PATCH] Distinguish empty json object and null > > * lisp/json.el (json-encode-list, json-encode): Handle empty object > correctly when json-null is not nil. > (json-pretty-print): Bind json-null to distinguish empty object and null. > --- > lisp/json.el | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/lisp/json.el b/lisp/json.el > index fdac8d9..a439f77 100644 > --- a/lisp/json.el > +++ b/lisp/json.el > @@ -588,7 +588,7 @@ Please see the documentation of `json-object-type' > and `json-key-type'." > "Return a JSON representation of LIST. > Tries to DWIM: simple lists become JSON arrays, while alists and plists > become JSON objects." > - (cond ((null list) "null") > + (cond ((eq json-null list) "null") > ((json-alist-p list) (json-encode-alist list)) > ((json-plist-p list) (json-encode-plist list)) > ((listp list) (json-encode-array list)) > @@ -700,12 +700,12 @@ Advances point just past JSON object." > ((stringp object) (json-encode-string object)) > ((keywordp object) (json-encode-string > (substring (symbol-name object) 1))) > - ((symbolp object) (json-encode-string > - (symbol-name object))) > ((numberp object) (json-encode-number object)) > ((arrayp object) (json-encode-array object)) > ((hash-table-p object) (json-encode-hash-table object)) > ((listp object) (json-encode-list object)) > + ((symbolp object) (json-encode-string > + (symbol-name object))) > (t (signal 'json-error (list object))))) > > ;; Pretty printing > @@ -722,6 +722,8 @@ Advances point just past JSON object." > (let ((json-encoding-pretty-print t) > ;; Ensure that ordering is maintained > (json-object-type 'alist) > + ;; Distinguish empty object and null > + (json-null :json-null) > (txt (delete-and-extract-region begin end))) > (insert (json-encode (json-read-from-string txt)))))) > > -- > 2.8.1 -- Yoichi NAKAYAMA