GNU bug report logs -
#20154
25.0.50; json-encode-string is too slow for large strings
Previous Next
Reported by: Dmitry Gutov <dgutov <at> yandex.ru>
Date: Fri, 20 Mar 2015 14:27:01 UTC
Severity: normal
Found in version 25.0.50
Done: Dmitry Gutov <dgutov <at> yandex.ru>
Bug is archived. No further changes may be made.
Full log
Message #44 received at 20154 <at> debbugs.gnu.org (full text, mbox):
As per your comment, this seems to be the best we can do for long
strings, without diving into C:
(defun json-encode-string-1 (string)
"Return a JSON representation of STRING."
(with-temp-buffer
(insert string)
(goto-char (point-min))
;; Skip over ASCIIish printable characters.
(while (re-search-forward "\\([\"\\/\b\f\n\r\t]\\)\\|[^ -~]" nil t)
(replace-match
(if (match-beginning 1)
;; Special JSON character (\n, \r, etc.).
(format "\\%c" (char-after (match-beginning 0)))
;; Fallback: UCS code point in \uNNNN form.
(format "\\u%04x" (char-after (match-beginning 0))))
t t))
(format "\"%s\"" (buffer-string))))
It brings the execution time down to ~0.14s here, on the same example.
And there'll need to be a fallback for short strings, because
`with-temp-buffer' overhead is non-trivial.
This bug report was last modified 10 years and 38 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.