我的实际行为是
(js->clj (clj->js [:a :b :c]) :keywordize-keys true)
=> ["a" "b" "c"]
期望的行为
[:a :b :c]
最佳答案
我不使用 ClojureScript,但应该注意 :keywordize-keys
没有执行任何操作,因为向量是按索引键控的。向量的元素是值,而不是索引。
你可以做类似的事情
(->> [:a :b :c]
(clj->js)
(js->clj)
(mapv keyword))
; Should print [:a :b :c]
当然,如果结构是嵌套的,这会变得有点复杂,但总体思路是一样的。
由于 JSON 无法识别“关键字”的概念,因此没有简单的方法可以在两种格式之间进行转换并维护什么是字符串和什么是关键字。如果确实需要区分,可以使用 Clojure 的 EDN 格式而不是 JSON。不过,只有当您不进行过多的 JavaScript 互操作时,这才有效。与普通 JS 库交换的任何数据都将涉及关键字和字符串的合并,除非该库理解 EDN 格式,或者您做了一些不幸的事情,例如将某种元数据附加到对象来指示什么是关键字,什么不是关键字。 p>
您也可以完全放弃关键字的想法,并在内部使用字符串来处理所有内容。这会很糟糕,但至少会让互操作变得更容易。
关于clojurescript - 使用 js->clj 转换为 json 时如何保留数组中的关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531174/