2013-03-25 2 views
8

Я пытаюсь довольно печатать JSON из clojurescript, на консоли браузера.довольно печатать в cljs

Я нашел ссылку - 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 не работает?
+0

Что вы получаете, когда используете '(.stringify js/JSON obj undefined 2)'? –

+1

Что такое '' 'obj'''? Если это карта clojure, вам нужно сначала преобразовать ее в объект js. – bmaddy

+0

Знает ли ClojureScript 'undefined'? – Jeremy

ответ

10

UPDATE: ClojureScript теперь имеет полный порт clojure.pprint в виде cljs.pprint.

Существует также fipp, который уже по масштабу и, вероятно, немного быстрее.

+0

У ClojureScript есть два довольно принтера: 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

Действительно, кто-то должен порт 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)))) 

Затем печатает значение в colorised YAML:

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

Это просто хак, но по крайней мере для чтения.

3

Следующая преобразует карту Clojure (object) в формате JSON и выводит его в консоль как объект, который может, следовательно, позволяют эффективно использовать браузеры проверяют функциональность JSON:

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

EDIT: В то время как довольно печать действительно приятно, в консоли разработчика я по-прежнему предпочитаю возможность просматривать структуру данных как дерево и теперь часто использую cljs-devtools. Это библиотека, которая дает вам интерактивное дерево данных, которое можно развернуть как обычный js-объект, но для vanilla clojure без необходимости конвертировать в js, что означает :keywords, {:ma "ps"} и остальную часть семейства clj.

В настоящий момент это требует, чтобы вы добавили зависимость от leiningen и некоторый код в свой проект и использовали Chrome Canary.

2

clojure.pprint был портирован на ClojureScript с выпуском 0.0-3255. Он называется cljs.pprint.

Смежные вопросы