2013-03-25 13 views
8

ブラウザのコンソールでclojurescriptからJSONをきれいに印刷しようとしています。cljsでのきれいな印刷

私は次のリンク発見 - How can I pretty-print JSON using JavaScript?

上記のリンクには、次のJSを提供 - cljsでJSON.stringify(obj, undefined, 2)

次翻訳が(.stringify js/JSON obj undefined 2)

  1. 仕事doesntのは、のためにcljsで任意のネイティブ方法はありますかなり印刷?
  2. 上記のcljs式がうまくいかない理由は何ですか?
+0

'(.stringify js/JSON obj undefined 2)'を使用するとどうなるでしょうか? –

+1

'' 'obj'''とは何ですか?クロージャーマップの場合、最初にjsオブジェクトに変換する必要があります。 – bmaddy

+0

ClojureScriptは 'undefined'を理解していますか? – Jeremy

答えて

10

UPDATE:ClojureScriptは今cljs.pprintの形でclojure.pprintのフルポートを持っています。

また、fippも範囲が狭く、おそらく少し速いです。

+0

ClojureScriptには、2台のきれいなプリンタがあります。 https://github.com/shaunlebron/cljs-pprint https://github.com/brandonbloom/fipp – ag0rex

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

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

は確かに、誰かがここにshaunlebron/cljs-pprintで起こっているように見えるポートclojure.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をcolorised出力します。

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

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

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

EDIT

3

以下はJSONにClojureのマップ(object)に変換し、したがってブラウザを活用することができるオブジェクトとしてコンソールにそれを印刷するには、JSONの機能を検査かなり印刷中本当にいいです、開発者コンソールでは、私はまだデータ構造をツリーとしてブラウズし、今では頻繁にcljs-devtoolsを使用する方が好きです。これは、通常のjsオブジェクトとして拡張できるインタラクティブなデータツリーを提供するライブラリですが、、{:ma "ps"}、およびcljファミリの残りの部分を意味するjsに変換することなく、バニラのクロージャに拡張できます。

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

2

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

関連する問題