Как расширить jj Writer clojure.contribs для сериализации других классов - PullRequest
4 голосов
/ 27 сентября 2011

Мне нужно создать объекты JSON из карт clojure, которые хранят такие вещи, как переменные clojure. Базовая реализация выдает такую ​​ошибку, когда видит их:

java.lang.Exception: не знаю, как написать JSON класса clojure.lang.Var

Может кто-нибудь указать мне пример кода о том, как расширить возможности писателя JSON?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 27 сентября 2011

Ну, я разобрался с ответом. Есть еще один вопрос, который частично отвечает на него: Как отобразить код clojure в JSON и из него?

Но вот код, который работал для меня:

(defn- write-json-clojure-lang-var [x #^PrintWriter out]
(.print out (json-str (str x))))

(extend clojure.lang.Var clojure.contrib.json/Write-JSON
    {:write-json write-json-clojure-lang-var})

Обратите внимание, что все, что я хотел сделать, это просто отобразить строковую версию, на которую я ссылаюсь. Конечно, вы могли бы сделать много других вещей ...

0 голосов
/ 12 февраля 2013

Обновление ответа от zippy для тех, кто использует более новую версию clojure.data.json. Это код, который будет работать с обновленной / новой библиотекой:

(defn- write-json-clojure-lang-var [x #^PrintWriter out]
    (.print out (json-str (str x))))

(extend clojure.lang.Var clojure.data.json/JSONWriter
    {:-write write-json-clojure-lang-var})
...