Eli Zaretskii <
eliz@gnu.org> schrieb am Do., 14. Dez. 2017 um 17:28 Uhr:
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Wed, 13 Dec 2017 22:37:46 +0000
> Cc: emacs-devel@gnu.org
>
> Sounds reasonable, here is a patch.
Thanks.
> -@defun json-parse-string string
> +@defun json-parse-string string &key (object-type 'hash-table)
Hmm.. why is there an apostrophe before "hash-table"? What do you
want to get in the output there?
An apostrophe? It seems to work as expected.
And btw, I don't see "&key" mentioned anywhere in the ELisp manual, so
I wonder whether the reader will understand what it means.
This is the Common Lisp syntax, from cl-defun etc. It's a bit unfortunate that it's not used in Emacs core, even for functions that take keyword arguments such as `make-process'. I can switch to '&rest args' if you prefer that.
> + case json_object_alist:
> + {
> + result = Qnil;
> + const char *key_str;
> + json_t *value;
> + json_object_foreach (json, key_str, value)
> + {
> + Lisp_Object key = Fintern (json_build_string (key_str), Qnil);
> + result
> + = Fcons (Fcons (key, json_to_lisp (value, object_type)),
> + result);
> + }
> + result = Fnreverse (result);
Is there a reason for calling nreverse here?
It puts the elements in the same order as the original JSON. (The Jansson parser also retains the original order.)
This isn't very important, just a bit nicer and less surprising.
> +The keyword argument OBJECT-TYPE specifies which Lisp type is used to
^^^^^^^^^^^
Shouldn't that be `:object-type' (including quotes)?
Depending on whether we can use &key in a docstring in core. If so, then this one is correct, see e.g. the docstring of should-error.