Как создать json в clojurescript
У меня есть clojurescript, который я хочу объединить с некоторыми библиотеками javascript. В моем коде clojurescript я делаю некоторый анализ и придумываю список карт.
что-то вроде
[{:prop1 "value1" :prop2 "value2"}, {:prop1 "something else" :prop2 "etc"}...]
Мне нужно передать это функции javascript как
[{prop1: "value1", prop2: "value2}, {..} ...]
Я не уверен, как вернуть объект javascript из моей функции clojurescript. Есть ли способ сериализации вложенных карт и списков объектов javascript. Или способ создать новый объект javascript, а затем установить на нем свойства?
Ответы
Ответ 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
)