0

我有一个案例需要对传入的 JSON 执行一些类型转换。不同的客户端以不同的类型发送几乎相同的数据:

{"amount": 49.90}
{"amount": "49.90"}

我的结构和处理程序:

struct Amount {
   pub amount: f64,
}

pub async fn amount(
    amount: ValidatedJson<Amount>
) -> Result<HttpResponse, AppError> {
    let amount: Amount = amount.to_inner();
    ...
}

当我尝试执行 JSON 来构造序列化时,会发生反序列化错误。

我尝试使用 serde_json 序列化原始正文,但没有弄清楚如何正确进行存在检查和错误处理,所以我坚持:

    let body: String = String::from_utf8(bytes.to_vec()).map_err(|e| {
        // logs
    })?;

    let body: Value = serde_json::from_str(body.as_str()).map_err(|e| {
        // logs
    })?;

    let body = body.as_object().unwrap();

    let amount: f32 = body.get("amount")?.as_f64()?;

这只能在夜间使用中完成try_trait。我认为这是一种愚蠢的方式。

我有哪些选择?我正在使用 Rust 1.43 和 actix-web 2.0.0。

4

0 回答 0