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
View this message in rfc822 format
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 52 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.