如何在Rust中将JSON字符串转换为HashMap?

4

我正在接收一个字符串,类似于下面这样的键值对(既不是JSON格式,也不是HashMap格式),它来自于隐式的JSONWebkey crate:

{ "kid":"kid-value",
"kty":"RSA",
"use":"sig",
"n":"n-value",
"e":"e-value" }

现在我该如何将这个HashMap转换为正确的形式以提取 "e" 和 "n" 的键和值呢?或者有没有更简单的方法来提取确切的 "e" 和 "n" 值呢?


你的输入是一个json字符串吗?如果是,你可以使用serde_json,他们的github上有一个例子。至于jsonwebkey crate,我不熟悉它。 - IamFr0ssT
“不是JSON[...] JSONWebkey”听起来很像JSON,为什么您说它不是呢?serde应该能够将其反序列化为哈希映射表,或者相关字段的结构体。 - Masklinn
不,从“JsonWebKey_Convert”创建的JSON Web密钥使用“.to_jwk()”仅返回字符串,请验证。 - Armani_bologne
1个回答

2

这个字符串是JSON格式的,所以你只需要解析它。默认情况下,serde_json会忽略所有未知字段,因此只声明包含所需字段的结构体就足够了:

#[derive(serde::Deserialize)]
struct Values {
    n: String,
    e: String,
}

fn main() -> Result<()> {
    let s = r#"{ "kid":"kid-value",
"kty":"RSA",
"use":"sig",
"n":"n-value",
"e":"e-value" }"#;

    let value = serde_json::from_str::<Values>(s)?;

    println!("{}", value.e);
    println!("{}", value.n);

    Ok(())
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接