Making JSON requests within Emacs Making JSON requests within Emacs json json

Making JSON requests within Emacs


The problem with other answers is that Stack Exchange API is GZIP'd and url.el shipped with Emacs does not automatically decompress it.

Take a look at my request.el library which supports automatic decompression (to be honest, I just added the support). Here is an example to fetch the most active question in stackoverflow:

(request "https://api.stackexchange.com/2.1/questions" :params '((order . "desc")           (sort . "activity")           (site . "stackoverflow")) :parser 'json-read :success (function*           (lambda (&key data &allow-other-keys)             (let* ((item (elt (assoc-default 'items data) 0))                    (title (assoc-default 'title item))                    (tags (assoc-default 'tags item)))               (message "%s %S" title tags)))))

request.el is well documented, comes with executable examples and is well tested.


Take a look at REST Client on GitHub - a tool to manually explore and test HTTP REST webservices.


This may not be the best way of doing things but it seems to work for me.

(defun fetch-json (url)   (with-current-buffer (url-retrieve-synchronously url)     ; there's probably a better way of stripping the headers     (search-forward "\n\n")     (delete-region (point-min) (point))     (buffer-string)))

Then calling this function with a url will return the content of the response, in this case, json. I've used the reddit api as an example because I'm not sure how the Stack Exchange api works.

 (fetch-json "http://reddit.com/r/emacs.json")

There is pretty much no error checking included here, if the url returns no data then this will blow up.