Hello again, Dmitry.

I managed to produce a benchmark with the following JSON file (560K,
~10,000 lines): http://folk.uio.no/simenheg/huge.json.

I read it into `huge-json', and ran the following before the patch:

(benchmark-run 100 (json-read-from-string huge-json))
     ⇒ (19.421527195 938 7.448190372000017)

And after the patch:

(benchmark-run 100 (json-read-from-string huge-json))
     ⇒ (19.321667537 997 7.218977015999971)

-- Simen

On Sun, Nov 1, 2015 at 8:52 PM, Simen Heggestøyl <simenheg@gmail.com> wrote:
Hi Dmitry, thanks for the feedback!

On Sat, Oct 31, 2015 at 3:23 PM, Dmitry Gutov <dgutov@yandex.ru> wrote:
The video looks great, but the inline patch lacks indentation, and doesn't apply (dunno if the former is the cause of the latter). Please resend it as an attachment.

Ah, yes, it appear that the whitespace got lost in the email for some
reason. I'll try attaching it to this email.

To test it, I've been using the following interactive function:

  (defun json-mode-show-path ()
    "Show the path to the JSON value under point."
    (interactive)
    (let ((path (json-path-to-position (point))))
      (if path
          (let ((formatted-path
                 (json-mode--format-path (plist-get path :path))))
            (pulse-momentary-highlight-region
             (plist-get path :match-start)
             (plist-get path :match-end))
            (message formatted-path)
            (kill-new formatted-path))
        (message "Not a JSON value"))))
  
  (defun json-mode--format-path (path)
    "Return PATH formatted as a JSON data selector.
  PATH should be a list of keys, which can be either strings or
  integers."
    (mapconcat (lambda (key) (format "[%S]" key)) path ""))

It's also included it in json-mode.el:
http://folk.uio.no/simenheg/json-mode.el.

Without trying it, my main concern would be any performance regression to json-read (it's not particularly fast already). Have you done any benchmarking?

I agree that would be bad. I'll try to produce some benchmarks when
I've got some free time on my hands!

-- Simen