2013-03-25 15 views
8

Sto cercando di stampare un JSON da clojurescript, nella console del browser.pretty printing in clj

ho trovato il seguente link - How can I pretty-print JSON using JavaScript?

Il link sopra fornisce i seguenti js - JSON.stringify(obj, undefined, 2)

la seguente traduzione in cljs non lavorare (.stringify js/JSON obj undefined 2)

  1. C'è un modo nativo in cljs per bella stampa?
  2. Qualche idea sul perché la precedente espressione cljs non funzioni?
+0

Cosa si ottiene quando si utilizza '(.stringify js/JSON obj undefined 2)'? –

+1

Che cos'è '' 'obj'''? Se si tratta di una mappa del clojure, devi prima convertirla in un oggetto js. – bmaddy

+0

ClojureScript riconosce 'undefined'? – Jeremy

risposta

10

UPDATE: ClojureScript ora ha un porto pieno di clojure.pprint sotto forma di cljs.pprint.

C'è anche un fipp che è più ristretto e probabilmente un po 'più veloce.

+0

ClojureScript ha due stampanti disponibili: 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

Anzi, qualcuno ha bisogno di porto clojure.pprint, che sembra essere in corso qui shaunlebron/cljs-pprint.

Nel frattempo, se si sta eseguendo su NodeJS, io uso prettyjson da 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)))) 

E poi stampa il valore in colorised YAML:

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

questo è solo un hack, ma almeno è leggibile.

3

Di seguito converte una mappa Clojure (object) per JSON e lo stampa nella console come un oggetto che può quindi sfruttare i browser ispezionare funzionalità JSON:

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

EDIT: mentre piuttosto la stampa è Davvero bello, nella console degli sviluppatori preferisco ancora la possibilità di sfogliare la struttura dati come un albero e ora uso frequentemente cljs-devtools. È una libreria che offre una struttura di dati interattiva che può essere espansa come un normale oggetto js ma per il clojure di vaniglia senza dover convertire in js, ovvero :keywords, {:ma "ps"} e il resto della famiglia clj.

Al momento richiede di aggiungere una dipendenza leiningen e del codice al progetto e di utilizzare Chrome Canary.

2

clojure.pprint è stato portato su ClojureScript con versione 0.0-3255. Si chiama cljs.pprint.