8个版本 (破坏性)
0.7.0 | 2022年1月14日 |
---|---|
0.6.0 | 2022年1月6日 |
0.5.1 | 2021年12月1日 |
0.5.0 | 2021年11月17日 |
0.1.0 | 2021年9月23日 |
#2270 in 数据结构
每月40次下载
54KB
1K SLoC
泛型JSON特质
文档 | 包信息 | 仓库 |
JSON是一种广泛应用于许多应用中的通用格式。根据上下文,没有一种单一的存储JSON值的方式,有时会导致某些应用在同一个地方使用多个JSON值的表示形式。这可能会给不关心JSON值实际内部表示的JSON处理库带来问题,但它们被迫坚持某种特定的格式,从而导致不同格式之间不必要的和代价高昂的转换。
该包抽象了处理JSON的不同库中定义的JSON数据结构,如json
、serde_json
等。目标是尽可能去除对这些库的硬依赖,并允许下游用户选择其首选的库。它基本上定义了一个特质Json
和一个抽象实现细节的ValueRef
类型。
Json
特质必须由JSON值类型实现,并定义了用于表示JSON值每个组件的不可见类型。它还提供了一个返回值为ValueRef
枚举类型的函数。其简化定义如下
/// JSON model.
pub trait Json: Sized + 'static {
/// Literal number type.
type Number;
/// String type.
type String;
/// Array type.
type Array;
/// Object key type.
type Key;
/// Object type.
type Object;
/// Returns a reference to this value as a `ValueRef`.
fn value(&self) -> ValueRef<'_, Self>;
/// Metadata type attached to each value.
type MetaData;
fn metadata(&self) -> &Self::MetaData;
}
ValueRef
公开了JSON值引用的结构
pub enum ValueRef<'v, T: Json> {
Null,
Bool(bool),
Number(&'v T::Number),
String(&'v T::String),
Array(&'v T::Array),
Object(&'v T::Object)
}
同样,此包还定义了一个ValueMut
类型,用于可变引用。这允许每个实现者都有自己的值内部表示,同时允许互操作性。
外部实现
此库可选地提供了以下外部类型的Json
特质实现,由其关联功能启用。
类型 | 功能门 |
---|---|
serde_json::Value |
serde_json-impl |
ijson::IValue |
ijson-impl |
特质别名
当启用nightly
功能时,此包还定义了一些特质别名,它们定义了JSON数据类型的常见要求。例如,JsonClone
特质别名确保JSON值的每个组件都实现了Clone
。
许可证
许可协议为以下之一
- Apache许可证,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,均应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~60–500KB