Fast JSON parser/writer working directly on UTF-8 bytes.
Fast JSON parser/writer working directly on UTF-8 bytes.
(parse input)(parse input {:keys [key-fn max-depth max-number-length bigdec]})Parses JSON from input (byte-array, String or InputStream) into Clojure
data structures. A leading UTF-8 byte order mark is skipped.
Options:
:key-fn - fn of String -> map key, applied to object keys.
Unset or nil leaves keys as strings. clojure.core/keyword is recognized
and uses an optimized interning path. Must be pure: results are cached by
fn identity, so a def'd fn gets cross-parse caching while a fresh lambda
is only cached within a single parse:max-depth - maximum nesting depth (default 1000):max-number-length - maximum length of a number in chars (default
1000): converting huge numbers is superlinear:bigdec - read non-integer numbers as exact BigDecimals
instead of doubles (default false)Throws com.s_exp.oda.JsonParseException on invalid input; its ex-data
is {:offset :line :column} (byte offset, 1-based line and column).
Parses JSON from `input` (byte-array, String or InputStream) into Clojure
data structures. A leading UTF-8 byte order mark is skipped.
Options:
* `:key-fn` - fn of String -> map key, applied to object keys.
Unset or nil leaves keys as strings. `clojure.core/keyword` is recognized
and uses an optimized interning path. Must be pure: results are cached by
fn identity, so a def'd fn gets cross-parse caching while a fresh lambda
is only cached within a single parse
* `:max-depth` - maximum nesting depth (default 1000)
* `:max-number-length` - maximum length of a number in chars (default
1000): converting huge numbers is superlinear
* `:bigdec` - read non-integer numbers as exact BigDecimals
instead of doubles (default false)
Throws `com.s_exp.oda.JsonParseException` on invalid input; its `ex-data`
is `{:offset :line :column}` (byte offset, 1-based line and column).(write x out)(write x out {:keys [default-fn key-fn date-format max-depth]})Writes x as JSON to out (OutputStream), flushes, does not close.
See write-str for options.
Writes `x` as JSON to `out` (OutputStream), flushes, does not close. See `write-str` for options.
(write-bytes x)(write-bytes x {:keys [default-fn key-fn date-format max-depth]})Writes x as JSON UTF-8 encoded byte-array. See write-str for options.
Writes `x` as JSON UTF-8 encoded byte-array. See `write-str` for options.
(write-str x)(write-str x {:keys [default-fn key-fn date-format max-depth]})Writes x as a JSON String.
Options:
:default-fn - called on values that cannot be written natively — both
unsupported types AND supported types with unrepresentable values
(NaN/Infinity Float/Double, also as map keys). Must return a natively
writable value: it is not applied again to its own result (values nested
inside the result do get it). Without it, those cases throw.:key-fn - transforms each map key before dispatch. Use to handle
nil keys, custom types, or normalize keys. Takes the key, returns any
writable key (String, Keyword, Symbol, Number, UUID, Boolean, Character,
Enum).:date-format - format for java.util.Date and java.time.Instant values:
a pattern string or a java.time.format.DateTimeFormatter (zone-less
formatters default to UTC). Default: yyyy-MM-dd'T'HH:mm:ss'Z' at UTC.
Other java.time values are written as ISO-8601 strings, Java enums by
name.:max-depth - maximum nesting depth (default 1000); deeper or cyclic
values throw instead of overflowing the stack.Writes `x` as a JSON String. Options: * `:default-fn` - called on values that cannot be written natively — both unsupported types AND supported types with unrepresentable values (NaN/Infinity Float/Double, also as map keys). Must return a natively writable value: it is not applied again to its own result (values nested inside the result do get it). Without it, those cases throw. * `:key-fn` - transforms each map key before dispatch. Use to handle nil keys, custom types, or normalize keys. Takes the key, returns any writable key (String, Keyword, Symbol, Number, UUID, Boolean, Character, Enum). * `:date-format` - format for java.util.Date and java.time.Instant values: a pattern string or a java.time.format.DateTimeFormatter (zone-less formatters default to UTC). Default: yyyy-MM-dd'T'HH:mm:ss'Z' at UTC. Other java.time values are written as ISO-8601 strings, Java enums by name. * `:max-depth` - maximum nesting depth (default 1000); deeper or cyclic values throw instead of overflowing the stack.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |