#json #pointers #json-parser #rfc #fragment #representation #identifier

json-pointer

一个用于解析和使用RFC 6901中规定的JSON指针的crate

7个版本

0.3.4 2020年9月5日
0.3.3 2020年9月5日
0.3.2 2017年6月1日
0.3.1 2017年5月30日
0.1.0 2017年5月26日

编码中排名#402

Download history 61475/week @ 2024-03-14 64502/week @ 2024-03-21 69827/week @ 2024-03-28 76100/week @ 2024-04-04 80104/week @ 2024-04-11 83388/week @ 2024-04-18 82484/week @ 2024-04-25 89872/week @ 2024-05-02 85921/week @ 2024-05-09 84692/week @ 2024-05-16 92610/week @ 2024-05-23 110362/week @ 2024-05-30 102425/week @ 2024-06-06 98524/week @ 2024-06-13 89529/week @ 2024-06-20 96529/week @ 2024-06-27

412,676次每月下载
58个crate(直接在11个中)中使用58个crate

MIT许可证

19KB
287

json-pointer

一个用于解析和使用RFC 6901中规定的JSON指针的crate。与内置在serde_json中的pointer方法不同,它处理在使用前验证JSON指针以及URI片段标识符表示。

pipeline status crates.io Documentation

创建JSON指针

JSON指针可以用字面量[&str]创建,或从String解析。

let from_strs = JsonPointer::new([
    "foo",
    "bar",
]);
let parsed = "/foo/bar".parse::<JsonPointer<_, _>>().unwrap();

assert_eq!(from_strs.to_string(), parsed.to_string());
}

使用JSON指针

JsonPointer类型提供了.get().get_mut(),分别用于获取适当的值的引用和可变引用。

let ptr = "/foo/bar".parse::<JsonPointer<_, _>>().unwrap();

let document = json!({
    "foo": {
        "bar": 0,
        "baz": 1,
    },
    "quux": "xyzzy"
});

let indexed = ptr.get(&document).unwrap();

assert_eq!(indexed, &json!(0));

URI片段标识符表示

JSON指针可以嵌入URI的片段部分。这也是为什么大多数JSON指针库需要在JSON指针的开头使用#字符的原因。crate将检测前导的#作为解析URI片段标识符表示的指示器。请注意,这意味着这个crate不支持解析完整的URI。

let str_ptr = "/f%o".parse::<JsonPointer<_, _>>().unwrap();
let uri_ptr = "#/f%25o".parse::<JsonPointer<_, _>>().unwrap();

assert_eq!(str_ptr, uri_ptr);

依赖

~355–760KB
~17K SLoC