For printing, package fset.jzon mostly just re-exports symbols from Jzon; you invoke the
printer in the same way, but methods have been added to print the FSet collections that the parser
can produce. So the tree you supply can contain anything that Jzon knows how to print, possibly
with FSet collections mixed in. The printing-related Jzon symbols re-exported are:
stringify, json-write-error, json-write-limit-error,
json-recursive-write-error, coerced-fields, coerce-key, writer,
make-writer, close-writer, and with-writer.
The one new printing-related function concerns tuple keys. As noted above, you may wish, when
parsing JSON objects into tuples, to wrap the key strings with a prefix and/or suffix before
interning them. When printing, you will probably want to strip these off. Package fset.jzon
exports the generic function coerce-tuple-key (see below), which gives you a package-specific
way to do that.
Jzon has three different ways it can print nil, depending on the type of the class slot
holding the value: [] for a list; false for a boolean; or null for all other
types. If you’re using tuples to represent JSON objects, you can get the same effect by using the
:type keyword argument to define-tuple-key. (Of
course, an empty seq will always print as [].) Examples:
(define-tuple-key +json-color+ :type (or null string)) (define-tuple-key +json-visible?+ :type boolean)
Generic function that FSet/Jzon calls to turn a tuple-key into a string.
coerce-tuple-key is called with the key as the first argument, and the key’s name’s package
name, as a keyword symbol, as the second. This arrangement allows you to write methods like
(defmethod coerce-tuple-key (key (pkg (eql :my-package)))
(let ((name (string (tuple-key-name key))))
(assert (string= name "+JSON-" :end1 6))
(string-downcase (subseq name 6 (1- (length name))))))
which will reverse the effect of passing "+JSON-" as key-prefix and "+" as
key-suffix to make-parser or with-parser.