在ClojureScript中序列化JavaScript对象

问题描述 投票:0回答:1

我如何使JS错误对象的编写器通过电线发送?当我执行(pr-str (js/Error. "OOPS"))时,它会给我"#object[Error Error: OOPS]"(js->clj (js/Error. "Oops!"))给出类似#object[Error Error: Oops!]的信息。我想为JS错误编写程序,以便我可以通过电线(也许是EDN)发送它们,并在另一端反序列化。

clojure clojurescript edn
1个回答
1
投票

ClojureScript除了js/Date之类的某些例外之外,不会尝试使用构造函数序列化JS对象。对于js/Error,首先问一下是有道理的:在JS世界中如何解决?此处有一个答案:https://stackoverflow.com/a/26199752/564509

(.stringify js/JSON (.getOwnPropertyNames js/Object err))

如果您不是将错误序列化为JSON,而是将其序列化为EDN,则只需自己遍历错误本身的属性名称并填写数据结构即可。有点像

(defn err->edn [e]
  (into {}
        (map (fn [k]
               [(keyword k) (js->clj (gobject/get e k))]))
        (.getOwnPropertyNames js/Object e)))

其中gobject必须为[goog.object :as gobject]

© www.soinside.com 2019 - 2024. All rights reserved.