#json #json-parser #pointers #rfc #uri #fragment #json-pointer

json-ptr

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

3个版本

使用旧的Rust 2015

0.3.6 2021年4月5日
0.3.5 2021年4月5日
0.3.4 2021年3月31日

#2911 in 解析器实现

每月25次下载
用于 jsonschema-valid-compat

MIT 许可证

19KB
288 代码行

json-pointer

一个用于解析和使用JSON指针的crate,如RFC 6901中指定。与内置在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–750KB
~17K SLoC