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