Подтвердить что ты не робот

Как создать json в clojurescript

У меня есть clojurescript, который я хочу объединить с некоторыми библиотеками javascript. В моем коде clojurescript я делаю некоторый анализ и придумываю список карт. что-то вроде

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

Мне нужно передать это функции javascript как

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

Я не уверен, как вернуть объект javascript из моей функции clojurescript. Есть ли способ сериализации вложенных карт и списков объектов javascript. Или способ создать новый объект javascript, а затем установить на нем свойства?

4b9b3361

Ответ 1

Я нашел функцию здесь

(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->clj в ядре ClojureScript.

Ответ 2

Просто ради людей, которые ищут что-то подобное.

Ядро ClojureScript теперь содержит функцию clj->js.

Ответ 3

Это работает для меня:

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

использование:

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