【发布时间】:2019-09-30 05:08:52
【问题描述】:
我需要反序列化以下负载,特别是 JSON 对象中的 aud 字段:
claims: Claims {
aud: One("CBr3zBlrKBbwmxOAM1avZQ=="), // 24 len
// ...
}
claims::aud 是一个 Aud 枚举:
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(untagged)]
pub enum Aud {
One(String),
Many(Vec<String>),
}
当我尝试从serde_json::to_string() 获取String 时,它会返回另外两个字符,一个开始字符和结束字符。
use serde_json::Result;
fn aud_from_json(data: &claims::Aud) -> Result<String> {
let v = serde_json::to_string(&data)?;
Ok(v.to_owned())
}
let aud = aud_from_json(&token_data.claims.aud)?;
log::debug!("aud field: {:?}\t aud field len({})", &aud, &aud.len());
$ aud field: "\"CBr3zBlrKBbwmxOAM1avZQ==\"" aud field len(26)
看起来可能有尾随转义字符序列化到字符串中。
有没有一种方法可以返回aud 字段返回为String,并在没有多余字符的情况下进行清理?
例如"CBr3zBlrKBbwmxOAM1avZQ=="
【问题讨论】:
-
很难回答您的问题,因为它不包含minimal reproducible example。我们无法分辨代码中存在哪些 crate(及其版本)、类型、特征、字段等。如果您尝试在 Rust Playground 上重现您的错误,如果可能的话,这将使我们更容易为您提供帮助,否则在全新的 Cargo 项目中,然后在 edit 您的问题中包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!
-
您还有一些名称不佳的函数,这些函数可能是您的一些问题的基础。例如,您有一个名为
aud_from_json的函数,它不接受 JSON 作为参数。相反,它似乎创建 JSON。
标签: rust escaping serde-json