如何部分反序列化JSON对象?

问题描述

我有一个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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...