当键名称中包含连字符时,如何将响应 JSON 读取为结构?

Sag*_*jaj 6 json rust json-deserialization serde reqwest

我正在查询 API 中的一些数据,但它们的键名称中包含连字符而不是下划线,并且由于结构字段名称中不能包含连字符,因此我无法对其进行转换。

例如,我的结构:

pub struct Example {
    user_id: String,
    name: String,
}
Run Code Online (Sandbox Code Playgroud)

收到的 json 就像

{
    "user-id": "abc",
    "name": "John"
}
Run Code Online (Sandbox Code Playgroud)

现在我正在这样做,但我不能,因为我不能直接投射它

let res = client
    .get("SOME-URL")
    .header("x-api-key", APP_ID)
    .send()
    .await?;

let response_body: Example = res.json().await?;
Run Code Online (Sandbox Code Playgroud)

Net*_*ave 10

如果只是单个属性,可以使用:

如果是全部(烤肉串盒或其他样式),您可以使用:

#[serde(rename_all = "kebab-case")]

#[derive(Deserialize, Debug)]
pub struct Example {
    #[serde(alias = "user-id")]
    user_id: String,
    name: String,
}
Run Code Online (Sandbox Code Playgroud)

操场