November 25, 2019
By: Kevin

json和edn的在线转化工具

  1. json格式化
  2. edn转json
  3. json转edn
(require '[reagent.core :as r])
(require '[cljs.reader :as reader])

json格式化

将不规范的json(key不用引号引起来)的形式转化为规范化形式

(defn unformated-json-input [json]
  [:textarea {
              :rows 10
              :cols 75
              :value @json
              :on-change #(reset! json (->> % .-target .-value))}])

(defn json->json [json]
  (try (-> json
           (clojure.string/replace #"'" "\"" )
           (clojure.string/replace #"(\w*)(\s*:)" "\"$1\"$2" )
           (#(.parse js/JSON %))
           (#(.stringify js/JSON % nil 2)))
       (catch :default e
         "json格式不正确")))


(defn container []
  (let [val (r/atom "{akey : 'format'}")]
    (fn []
      [:div
       [:h3 "edn:"]
       [unformated-json-input val]
       [:h3 "json"]
       [:div (json->json @val)]])))

edn转json

(defn edn-input [edn]
  [:textarea {
              :rows 10
              :cols 75
              :value (with-out-str (cljs.pprint/pprint @edn))
              :on-change #(reset!
                           edn
                           (reader/read-string (-> % .-target .-value)))}])

(defn edn->json [edn]
  (->> edn
    clj->js
    (#(.stringify js/JSON % nil 2))))


(defn container []
  (let [val (r/atom {:json "format"})]
    (fn []
      [:div
       [:h3 "edn:"]
       [edn-input val]
       [:h3 "json"]
       [:div (edn->json @val)]])))

json转edn

(defn json-input [json]
  [:textarea {
              :rows 10
              :cols 75
              :value @json
              :on-change #(reset! json (->> % .-target .-value))}])


(defn json->edn [json]
  (->> json
    (.parse js/JSON )
    (#(js->clj % :keywordize-keys true))
    ))

(defn container []
  (let [val (r/atom "{\"json\": \"format\"}")]
    (fn []
      [:div
       [:h3 "json:"]
       [json-input val]
       [:h3 "edn"]
       [:div (-> @val json->edn cljs.pprint/pprint with-out-str)]])))
Tags: clojure 工具 clojurescript