2016-04-09 13 views
1

ClojureScript'te çalışıyorum ve büyük boyutlu bir EDN veri yapısını (özellikle: büyük bir harita) bir metin dosyası biçiminde (JS nesnelerinin .json dosyaları olarak depolandığı şekilde) serileştirmek istiyorum. Performans endişeleri bir sorun değil.ClojureScript edn'in bir metin dosyası olarak düzenlenmesi (json gibi)?

Bu mümkün mü ve eğer öyleyse, bunu yapmak için standart/en iyi uygulama şekli var mıdır?

cevap

2

Evet. EDN yazmak için pr-str veya clojure.pprint/pprint kullanın ve EDN'yi almak için clojure.edn/read-string kullanın.

ClojureScript'te, tarayıcıya dosya sisteminden erişirken Javascript ile aynı zorluklarla karşılaşabilirsiniz. örnek biraz yanıltıcı olabilir tarayıcı şeylerden bir dosyayı kaydetmek için için:

(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"))) 

Yani bu dosyalara erişmek nasıl bağlamında bağlıdır, ancak çok uzun alabilirsiniz/dizeleri koymak kadar kolay olan pr-str ve edn/read-string olarak.