#serde-json #json #serde #character

serde-json-fmt

为serde_json序列化提供可配置的格式化

1 个不稳定发布

0.1.0 2023年4月15日

1519编码

Download history 34/week @ 2024-03-11 58/week @ 2024-03-18 33/week @ 2024-03-25 67/week @ 2024-04-01 26/week @ 2024-04-15 24/week @ 2024-04-22 81/week @ 2024-04-29 4/week @ 2024-05-06 8/week @ 2024-05-13 23/week @ 2024-05-20 25/week @ 2024-05-27 29/week @ 2024-06-03 26/week @ 2024-06-10 10/week @ 2024-06-17 37/week @ 2024-06-24

104 每月下载
2 个crate中使用(通过 clust

MIT 协议

44KB
901 代码行

Project Status: Active – The project has reached a stable, usable state and is being actively developed. CI Status codecov.io MIT License

GitHub | crates.io | 文档 | 问题

serde-json-fmt crate 允许你创建自定义的 serde_json 格式化程序,具有你选择的缩进、分隔符和ASCII要求。

serde_json 本身只直接提供以“紧凑”形式或“美观”形式生成JSON的能力,唯一可自定义的方面是用于美观缩进的字符串。serde-json-fmt 补充了 serde_json,让你还可以自定义逗号和冒号周围的空白以及是否转义非ASCII字符。

安装

serde-json-fmt 需要 Rust 1.60 或更高版本。要在你的 Cargo 项目中使用 serde-json-fmt 库,请将以下内容添加到你的 Cargo.toml

[dependencies]
serde-json-fmt = "0.1.0"

示例

假设你想以单行“紧凑”形式序列化一个值,但你希望每个冒号和逗号后面都有一个空格,这是 serde_json 的紧凑形式不做的。 serde-json-fmt 允许你这样做

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}}"#
);

假设你想以多行“美观”形式格式化一个值,但使用四个空格缩进,并且所有非ASCII字符都编码为 \uXXXX 转义序列。 serde-json-fmt 允许你这样做

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"
    }
}"#);

依赖项

~0.5–0.9MB
~19K SLoC