在cljs打印漂亮

时间:2013-03-25 05:11:44

标签: clojure clojurescript

我试图在浏览器的控制台上从clojurescript打印出一个JSON。

我找到了以下链接 - How can I pretty-print JSON using JavaScript?

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

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

  1. 在cljs中是否有任何原生方式可以进行漂亮的打印?
  2. 上述cljs表达式无效的任何想法?

4 个答案:

答案 0 :(得分:10)

UPDATE :ClojureScript现在以cljs.pprint的形式提供了一个完整的clojure.pprint端口。

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

答案 1 :(得分:5)

cljs.user> (.stringify js/JSON (clj->js {:foo 42}) nil 2)
"{\n  \"foo\": 42\n}"

cljs.user> (pr-str {:foo 42})
"{:foo 42}"

答案 2 :(得分:3)

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

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

编辑:虽然漂亮的打印非常好,但在开发者控制台中,我仍然更喜欢以树的形式浏览数据结构,现在经常使用cljs-devtools。它是一个库,它为您提供了一个交互式数据树,可以作为普通的js-object进行扩展,但对于vanilla clojure而不必转换为js,这意味着:keywords{:ma "ps"}和clj的其余部分-家庭。

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

答案 3 :(得分:1)

事实上,有人需要移植clojure.pprint,这似乎正在shaunlebron/cljs-pprint进行。

同时,如果您在NodeJS上运行,我会从npm使用prettyjson

(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

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