我有一些clojurescript,我想与一些JavaScript库互操作。在我的clojurescript代码中,我做了一些分析,并提出了一个地图列表。
之类的东西[{:prop1 "value1" :prop2 "value2"}, {:prop1 "something else" :prop2 "etc"}...]
我需要将其传递给javascript函数
[{prop1: "value1", prop2: "value2}, {..} ...]
我不知道如何从我的clojurescript函数返回一个javascript对象。有没有办法将嵌套的地图和列表序列化为javascript对象。或者一种创建新javascript对象然后在其上设置属性的方法?
答案 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
)