S式に変換したJSONデータに簡単にアクセスする方法


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

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

[code]

    ;; 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
    
[/code]

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

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




「他のLISP系言語ではS式に変換したJSONやXMLをどのように扱っているのか」について。

SaitoAtsushiさんがGaucheにjsonpathを移植しています。

<http://saito.hatenablog.jp/entry/2013/06/20/233036>

ただ、JSONの緩さのために、XPathのような使い勝手にはならないようですが：

<http://saito.hatenablog.jp/entry/2013/06/25/095332>

XMLについては、Scheme間でポータブルなXPathの実装SXPathがわりと使われていると思います。

