23

いくつかの JavaScript ライブラリと相互運用したい clojurescript があります。私の clojurescript コードでは、いくつかの分析を行い、マップのリストを作成します。何かのようなもの

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

これをJavaScript関数に渡す必要があります

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

ただし、clojurescript 関数から JavaScript オブジェクトを返す方法がわかりません。ネストされたマップとリストを javascript オブジェクトにシリアル化する方法はありますか。または、新しい JavaScript オブジェクトを作成し、それにプロパティを設定する方法はありますか?

4

3 に答える 3

47

似たようなものを探している人のために。

ClojureScript コアにclj->js関数が含まれるようになりました。

于 2013-04-21T16:43:28.443 に答える
17

ここで関数を見つけました

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

私が必要としていたことを正確に行います。js->cljClojureScript コアには逆関数もあります。

于 2012-04-17T17:51:46.707 に答える
10

これは私にとってはうまくいきます:

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

利用方法:

(let [json (clj->json data-structure)]
  ;; do something with json
  )
于 2015-03-17T14:02:49.577 に答える