1 unstable release
0.1.0 | Apr 15, 2023 |
---|
#1519 in Encoding
104 downloads per month
Used in 2 crates
(via clust)
44KB
901 lines
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.
Installation
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
:
[dependencies]
serde-json-fmt = "0.1.0"
Examples
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:
use serde_json::json;
use serde_json_fmt::JsonFormat;
let value = json!({
"colors": ["red", "blue", "taupe"],
"sub": {
"name": "Foo",
"on": true,
"size": 17
}
});
let s = JsonFormat::new()
.comma(", ")
.unwrap()
.colon(": ")
.unwrap()
.format_to_string(&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:
use serde_json::json;
use serde_json_fmt::JsonFormat;
let value = json!({
"emojis": {
"goat":"🐐",
"pineapple": "🍍",
"smile": "😀",
},
"greek": {
"α": "alpha",
"β": "beta",
"γ": "gamma",
}
});
let s = JsonFormat::pretty()
.indent_width(Some(4))
.ascii(true)
.format_to_string(&value)
.unwrap();
assert_eq!(s, r#"{
"emojis": {
"goat": "\ud83d\udc10",
"pineapple": "\ud83c\udf4d",
"smile": "\ud83d\ude00"
},
"greek": {
"\u03b1": "alpha",
"\u03b2": "beta",
"\u03b3": "gamma"
}
}"#);
Dependencies
~0.5–0.9MB
~19K SLoC