如何在clojurescript中创建json

时间:2012-04-14 21:17:38

标签: clojurescript

我有一些clojurescript,我想与一些JavaScript库互操作。在我的clojurescript代码中,我做了一些分析,并提出了一个地图列表。

之类的东西
[{:prop1 "value1" :prop2 "value2"}, {:prop1 "something else" :prop2 "etc"}...]

我需要将其传递给javascript函数

[{prop1: "value1", prop2: "value2}, {..} ...]

我不知道如何从我的clojurescript函数返回一个javascript对象。有没有办法将嵌套的地图和列表序列化为javascript对象。或者一种创建新javascript对象然后在其上设置属性的方法?

3 个答案:

答案 0 :(得分:41)

只是为了寻找类似的东西。

ClojureScript核心现在包含clj->js函数。

答案 1 :(得分:15)

我找到了一个函数here

(defn clj->js
  "Recursively transforms ClojureScript maps into Javascript objects,
   other ClojureScript colls into JavaScript arrays, and ClojureScript
   keywords into JavaScript strings.

   Borrowed and updated from mmcgrana."
  [x]
  (cond
    (string? x) x
    (keyword? x) (name x)
    (map? x) (.-strobj (reduce (fn [m [k v]]
               (assoc m (clj->js k) (clj->js v))) {} x))
    (coll? x) (apply array (map clj->js x))
    :else x))

完全符合我的需要。还有反函数,即ClojureScript核心中的js->clj

答案 2 :(得分:8)

这对我有用:

(defn clj->json
  [ds]
  (.stringify js/JSON (clj->js ds)))

用法:

(let [json (clj->json data-structure)]
  ;; do something with json
  )