Я не использую ClojureScript, но следует заметить, что :keywordize-keys
не делает ничего вероятного, потому что векторы кодируются по индексу.Элементами вектора являются значения, а не индексы.
Вы можете сделать что-то вроде
(->> [:a :b :c]
(clj->js)
(js->clj)
(mapv keyword))
; Should print [:a :b :c]
Конечно, это становится немного сложнее, если структура вложенная, но это та же общая идея.
Поскольку JSON не распознает концепцию «ключевого слова», нет простого способа преобразования между двумя форматами и поддержания того, что является строкой и что является ключевым словом.Если вам действительно нужно различать, вы можете использовать формат EDN Clojure вместо JSON.Это будет работать только в том случае, если вы не выполняете чрезмерное взаимодействие с JavaScript.Любые данные, которыми обмениваются с простой библиотекой JS, будут включать в себя сочетание ключевых слов и строк, если библиотека не понимает форматирование EDN, или вы делаете что-то неудачное, например, прикрепляете к объекту какие-то метаданные, указывающие, что является ключевым словом, а что нет.
Вы также можете полностью отказаться от идеи ключевых слов и использовать строки для всего внутри.Это будет отстой, но, по крайней мере, это облегчит взаимодействие.