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の完全なポートがあります。

範囲が狭く、おそらく少し速いフィップもあります。

于 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として拡張できるインタラクティブなデータツリーを提供するライブラリですが、js、つまり:keywords{:ma "ps"}およびclj-familyの残りの部分に変換する必要はありません。

現時点では、leiningen依存関係といくつかのコードをプロジェクトに追加し、ChromeCanaryを使用する必要があります。

于 2015-02-04T09:38:21.297 に答える
2

clojure.pprintリリースでClojureScriptに移植されました0.0-3255。それはと呼ばれcljs.pprintます。

于 2015-05-09T13:31:53.810 に答える
1

確かに、誰かが移植する必要がありますがclojure.pprint、これはここで行われているようですshaunlebron/cljs-pprint

それまでの間、NodeJSで実行している場合はprettyjson、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

これは単なるハックですが、少なくとも読み取り可能です。

于 2014-12-11T16:39:18.330 に答える