10

我正在尝试在浏览器的控制台上从 clojurescript 漂亮地打印 JSON。

我找到了以下链接 -如何使用 JavaScript 漂亮地打印 JSON?

上面的链接提供了以下js -JSON.stringify(obj, undefined, 2)

cljs 中的以下翻译不起作用(.stringify js/JSON obj undefined 2)

  1. cljs 中是否有任何用于漂亮打印的本地方式?
  2. 任何想法为什么上面的 cljs 表达式不起作用?
4

5 回答 5

11

更新:ClojureScript 现在以 cljs.pprint 的形式拥有完整的 clojure.pprint 端口。

还有一个fipp范围更窄,可能更快一些。

于 2013-03-26T14:24:30.973 回答
5
cljs.user> (.stringify js/JSON (clj->js {:foo 42}) nil 2)
"{\n  \"foo\": 42\n}"

cljs.user> (pr-str {:foo 42})
"{:foo 42}"
于 2014-10-07T23:44:16.847 回答
4

下面将 Clojure 映射 ( object) 转换为 JSON,并将其作为对象打印在控制台中,从而可以利用浏览器检查 JSON 功能:

(.dir js/console (clj->js object)) 

编辑:虽然漂亮的打印非常好,但在开发人员控制台中,我仍然更喜欢将数据结构作为树浏览的能力,现在经常使用cljs-devtools。它是一个为您提供交互式数据树的库,可以将其扩展为普通的 js-object,但对于 vanilla clojure,无需转换为 js、meaning:keywords{:ma "ps"}clj-family 的其余部分。

目前,它需要您向项目中添加 leiningen 依赖项和一些代码并使用 Chrome Canary。

于 2015-02-04T09:38:21.297 回答
2

clojure.pprint已通过 release 移植到 ClojureScript 0.0-3255。它被称为cljs.pprint

于 2015-05-09T13:31:53.810 回答
1

确实,有人需要移植clojure.pprint,这似乎正在发生shaunlebron/cljs-pprint

同时,如果你在 NodeJS 上运行,我使用prettyjsonfrom npm。

(ns foo (:require [cljs.nodejs :as nodejs]
                  [cljs.core :refer [clj->js]]))
(nodejs/enable-util-print!)
(def render (.-render (nodejs/require "prettyjson")))
(defn pp [value] (println (render (clj->js value))))

然后它以彩色YAML打印值:

ClojureScript:foo> (pp {:a 123 :foo ["baz" 42]})
a:   123
foo:
  - baz
  - 42

这只是一个 hack,但至少是可读的。

于 2014-12-11T16:39:18.330 回答