GitHub | crates.io | Documentation | Issues
The serde-json-fmt
crate lets you create custom
serde_json
formatters with the
indentation, separators, and ASCII requirements of your choice.
serde_json
itself only directly provides the ability to produce JSON in
either "compact" form or "pretty" form, with the only customizable aspect being
the string used for pretty indentation. serde-json-fmt
complements
serde_json
to let you also customize the whitespace around commas & colons
and whether to escape non-ASCII characters.
serde-json-fmt
requires version 1.60 of Rust or higher. To use the
serde-json-fmt
library in your Cargo project, add the following to your
Cargo.toml
:
toml
[dependencies]
serde-json-fmt = "0.1.0"
Say you want to serialize a value in one-line "compact" form, but you want a
space after each colon & comma, something that serde_json
's compact form
doesn't do. serde-json-fmt
lets you do that:
```rust use serdejson::json; use serdejson_fmt::JsonFormat;
let value = json!({ "colors": ["red", "blue", "taupe"], "sub": { "name": "Foo", "on": true, "size": 17 } });
let s = JsonFormat::new() .comma(", ") .unwrap() .colon(": ") .unwrap() .formattostring(&value) .unwrap();
assert_eq!( s, r#"{"colors": ["red", "blue", "taupe"], "sub": {"name": "Foo", "on": true, "size": 17}}"# ); ```
Say you want to format a value in multiline "pretty" form, but using four-space
indents and with all non-ASCII characters encoded as \uXXXX
escape sequences.
serde-json-fmt
lets you do that:
```rust use serdejson::json; use serdejson_fmt::JsonFormat;
let value = json!({ "emojis": { "goat":"🐐", "pineapple": "🍍", "smile": "😀", }, "greek": { "α": "alpha", "β": "beta", "γ": "gamma", } });
let s = JsonFormat::pretty() .indentwidth(Some(4)) .ascii(true) .formatto_string(&value) .unwrap();
assert_eq!(s, r#"{ "emojis": { "goat": "\ud83d\udc10", "pineapple": "\ud83c\udf4d", "smile": "\ud83d\ude00" }, "greek": { "\u03b1": "alpha", "\u03b2": "beta", "\u03b3": "gamma" } }"#); ```