在 ClojureScript 中序列化 JavaScript 个对象
Serialize JavaScript objects in ClojureScript
如何编写 JS 错误对象的编写器以通过网络发送?当我做 (pr-str (js/Error. "OOPS"))
它给了我 "#object[Error Error: OOPS]"
。 (js->clj (js/Error. "Oops!"))
给出类似 #object[Error Error: Oops!]
的内容。
我想为 JS 错误创建一个编写器,这样我就可以通过网络(也许是 EDN)发送它们并在另一端反序列化。
ClojureScript 不会尝试使用构造函数序列化 JS 对象,除了一些例外情况,例如 js/Date
。
在 js/Error
的情况下,首先要问:这在 JS 世界中将如何解决?
此处提供一个答案:
(.stringify js/JSON (.getOwnPropertyNames js/Object err))
如果您需要将错误序列化为 EDN 而不是 JSON,您只需自己迭代错误自己的 属性 名称并填写数据结构。像
(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]
。
如何编写 JS 错误对象的编写器以通过网络发送?当我做 (pr-str (js/Error. "OOPS"))
它给了我 "#object[Error Error: OOPS]"
。 (js->clj (js/Error. "Oops!"))
给出类似 #object[Error Error: Oops!]
的内容。
我想为 JS 错误创建一个编写器,这样我就可以通过网络(也许是 EDN)发送它们并在另一端反序列化。
ClojureScript 不会尝试使用构造函数序列化 JS 对象,除了一些例外情况,例如 js/Date
。
在 js/Error
的情况下,首先要问:这在 JS 世界中将如何解决?
此处提供一个答案:
(.stringify js/JSON (.getOwnPropertyNames js/Object err))
如果您需要将错误序列化为 EDN 而不是 JSON,您只需自己迭代错误自己的 属性 名称并填写数据结构。像
(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]
。