fad*_*bee 5 rust serde serde-json
我有一个 JSON 对象:
{"content":{"foo":1,"bar":2},"signature":"3f5ab1..."}
Run Code Online (Sandbox Code Playgroud)
将其反序列化为自定义类型已经可以正常工作,使用:
let s: SignedContent = serde_json::from_str(string)?;
Run Code Online (Sandbox Code Playgroud)
我想要的是{"foo":1,"bar":2}
一个&[u8]
切片,以便我可以检查签名。
(我知道有关规范 JSON 表示的问题,并已采取缓解措施。)
目前我正在浪费地将对象(在对象内)重新序列化为一个字符串并从中获取八位字节。Content
SignedContent
有没有更有效的方法?
看起来像是一份工作serde_json::value::RawValue
(可通过“raw_value”功能获得)。
引用输入数据中包含单个有效 JSON 值的字节范围。
A
RawValue
可用于将负载的部分解析推迟到稍后,或者在负载的部分只需要逐字传输到不同的输出对象的情况下完全避免解析它。序列化时,这种类型的值将保留其原始格式,并且不会被缩小或精美打印。
用法是:
#[derive(Deserialize)]
struct SignedContent<'a> {
#[serde(borrow)]
content: &'a RawValue,
// or without the 'a
//content: Box<RawValue>
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用content.get()
来获取原始&str
.