emacs24ではjson.elというJSONライブラリが標準で付属しています。これはエンコーダとデコーダのみを提供しており、変換後のS式をどのように扱うかはユーザ毎に異なります。

S式の要素を参照するための関数としてcar/cdr/assoc/elt等が用意されています。ただし、これらを多用するとパッと見てどこを参照しているのか分かりにくいように思えます。

;; FILE.json の中身
;; {
;;   "foo": {
;;    "bar": [1, 2, 3]
;;   }
;; }
(require 'json)
(let* ((json-key-type 'string)
       (json (json-read-file "FILE.json")))
  ;; json -> (("foo" ("bar" . [1 2 3])))
  (elt (cdr (assoc "bar" (cdr (assoc "foo" json)))) 0)
;=> 1

そこで、ネストしたS式に対して (json "foo" "bar" 0) のように簡単にアクセスできる書き方(あるいはライブラリ)はあるでしょうか?ライブラリであればMELPA等でパッケージ配布されていると尚良いです。

質問ではElispを対象にしていますが、他のLISP系言語ではS式に変換したJSONやXMLをどのように扱っているのか、参考にできそうな方法を知っていたら教えてほしいです。