1个不稳定版本

0.12.5 2023年8月25日

#654编码

Download history 1688/week @ 2024-04-23 2356/week @ 2024-04-30 2480/week @ 2024-05-07 11784/week @ 2024-05-14 11174/week @ 2024-05-21 23410/week @ 2024-05-28 26221/week @ 2024-06-04 15381/week @ 2024-06-11 9744/week @ 2024-06-18 6362/week @ 2024-06-25 4169/week @ 2024-07-02 27041/week @ 2024-07-09 43127/week @ 2024-07-16 24588/week @ 2024-07-23 46611/week @ 2024-07-30 28435/week @ 2024-08-06

146,000 每月下载量
用于 14 个crate(2个直接使用)

MIT/Apache

150KB
3.5K SLoC

jzon-rs

maciejhirsz/json-rust的采纳和延续。向其创造者Maciej Hirsz表示敬意。

Rust库,轻松解析和序列化JSON。

变更日志 - 完整文档 - Cargo - 仓库

为什么?

JSON是一个非常宽松的格式,几乎什么都可以 - 数组可以包含混合类型,对象键可以在API调用之间更改类型或在某些条件下不包括某些键。将此映射到惯用的Rust结构体引入了摩擦。

此crate旨在避免这种摩擦。

let parsed = jzon::parse(r#"

{
    "code": 200,
    "success": true,
    "payload": {
        "features": [
            "awesome",
            "easyAPI",
            "lowLearningCurve"
        ]
    }
}

"#).unwrap();

let instantiated = object!{
    // quotes on keys are optional
    "code": 200,
    success: true,
    payload: {
        features: [
            "awesome",
            "easyAPI",
            "lowLearningCurve"
        ]
    }
};

assert_eq!(parsed, instantiated);

一等公民

使用宏和索引,轻松处理数据。

let mut data = object!{
    foo: false,
    bar: null,
    answer: 42,
    list: [null, "world", true]
};

// Partial equality is implemented for most raw types:
assert!(data["foo"] == false);

// And it's type aware, `null` and `false` are different values:
assert!(data["bar"] != false);

// But you can use any Rust number types:
assert!(data["answer"] == 42);
assert!(data["answer"] == 42.0);
assert!(data["answer"] == 42isize);

// Access nested structures, arrays and objects:
assert!(data["list"][0].is_null());
assert!(data["list"][1] == "world");
assert!(data["list"][2] == true);

// Error resilient - accessing properties that don't exist yield null:
assert!(data["this"]["does"]["not"]["exist"].is_null());

// Mutate by assigning:
data["list"][0] = "Hello".into();

// Use the `dump` method to serialize the data:
assert_eq!(data.dump(), r#"{"foo":false,"bar":null,"answer":42,"list":["Hello","world",true]}"#);

// Or pretty print it out:
println!("{:#}", data);

安装

只需将其添加到您的Cargo.toml文件中

[dependencies]
jzon = "*"

然后在您的main.rs / lib.rs文件中导入它

#[macro_use]
extern crate jzon;

性能和一致性

这里曾经有一段话说明性能不是此crate的主要目标。它现在绝对是其中之一。

虽然此crate不提供将JSON解析到原生Rust结构体的方法,但它为DOM解析、字符串化和操作进行了大量优化。它在基准测试中表现良好,在某些情况下甚至可以超越解析到结构体的性能。

此crate根据 RFC 7159ECMA-404文档实现标准。为了实现最佳互操作性,浮点数以64位精度尾数和16位指数的形式存储。

许可证

此crate根据MIT许可证和Apache许可证(版本2.0)的条款分发。选择最适合您的任何一个。

有关详细信息,请参阅LICENSE-APACHELICENSE-MIT

无运行时依赖