You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tauri应用中JS向Rust传递Map数据未被接收问题求助

解决Tauri中JS Map无法被Rust后端接收的问题

JavaScript的Map类型无法被JSON标准序列化,通过Tauri的invoke传递时会被序列化为空对象{},导致Rust后端的HashMap接收不到数据。以下是两种可行的解决方法:

方案一:前端将Map转换为普通对象(推荐)

在调用invoke前,把items从Map转为普通键值对对象,使其能被标准JSON序列化:

async function handleSubmit(e) {
    e.preventDefault();
    // 转换Map为普通对象
    const submitData = {
        ...details,
        items: Object.fromEntries(details.items)
    };
    await invoke('submit_new_customer', { details: submitData }).then((submitted) => { 
        // 后续逻辑
    });
}

转换后items会变成{ '3': 1 },后端原有的HashMap<String, usize>无需修改即可正常接收数据。

方案二:后端通过Serde扩展支持JS Map

如果不想修改前端代码,可以使用serde_with库扩展Serde的反序列化能力:

  1. 在Cargo.toml中添加依赖:
[dependencies]
serde_with = "3.4"
  1. 修改Rust结构体,添加serde_as属性配置:
use serde_with::serde_as;
use std::collections::HashMap;

#[serde_as]
#[derive(Serialize, Deserialize, Debug)]
struct NewCustomerInput {
    name: String,
    country: String,
    address: Option<String>,
    // 配置为兼容JS Map的反序列化规则
    #[serde_as(as = "serde_with::maps::FlexibleKey")]
    items: HashMap<String, usize>
}

内容的提问来源于stack exchange,提问作者András Krausz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:34:58