Since version 5.0.0, custom encoding is part of the core namespace. You can register custom encoders for specific Java classes to control how they are serialized. This allows you to use the fast core encoder while providing custom logic for specific types.
Use add-encoder to register a function that takes the object and a jsonGenerator. Use remove-encoder to unregister them.
Common built-in encoder helpers include: encode-nil, encode-number, encode-seq, encode-date, encode-bool, encode-named, encode-map, encode-symbol, and encode-ratio.
(ns myns
(:require [cheshire.core :refer :all]
[cheshire.generate :refer [add-encoder encode-str remove-encoder]]))
;; Add a custom encoder for a class
(add-encoder java.awt.Color
(fn [c jsonGenerator]
(.writeString jsonGenerator (str c))))
;; Use a helper for common encoding actions
(add-encoder java.net.URL encode-str)
;; Use the encoder
(encode (java.awt.Color. 1 2 3))
;; Remove a custom encoder
(remove-encoder java.awt.Color)