将 ClojureScript edn 序列化为文本文件(如 json)?

Geo*_*rge 4 clojurescript

我正在 ClojureScript 中工作,希望以文本文件的形式序列化大量 EDN 数据结构(特别是:大地图)(与 JS 对象存储为.json文件的方式相同)。性能问题不是问题。

这是否可能,如果可以,是否有考虑标准/最佳实践方法来做到这一点?

Tim*_*ley 5

是的。使用pr-strclojure.pprint/pprint写入 EDN 并使用clojure.edn/read-string摄取 EDN。

在 ClojureScript 中,从浏览器访问文件系统时,您可能会面临与 Javascript 相同的挑战。例如,要从浏览器保存文件可能会有点棘手:

(defn save-file [filename t s]
  (if js/Blob
    (let [b (js/Blob. #js [s] #js {:type t})]
      (if js/window.navigator.msSaveBlob
        (js/window.navigator.msSaveBlob b filename)
        (let [link (js/document.createElement  "a")]
          (aset link "download" filename)
          (if js/window.webkitURL
            (aset link "href" (js/window.webkitURL.createObjectURL b))
            (do
              (aset link "href" (js/window.URL.createObjectURL b))
              (aset link "onclick" (fn destroy-clicked [e]
                                     (.removeChild (.-body js/document) (.-target e))))
              (aset link "style" "display" "none")
              (.appendChild (.-body js/document) link)))
          (.click link))))
    (log/error "Browser does not support Blob")))
Run Code Online (Sandbox Code Playgroud)

因此,这取决于您访问文件的方式的上下文,但只要您可以获取/放置字符串,它就像 pr-str 和 edn/read-string 一样简单。