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

Rust如何将vector写入JSON文件及E0308类型不匹配错误解决

问题分析

你遇到的E0308类型不匹配错误原因非常明确:

  • std::fs::File的write方法要求输入参数为&[u8](字节切片)类型
  • serde_json::to_string返回的是String类型,直接取&data得到的是&String类型引用,和要求的参数类型不匹配
  • 额外提醒:即使类型匹配也不建议直接用write方法,该方法不保证写入全部传入的字节,只返回实际写入的字节数,写入文件优先用write_all方法保证完整写入。
修复方案

方案1:手动转换类型适配write接口

只需要修改写入行,将String转为字节切片即可:

use std::fs::File;
use std::io::prelude::*;

fn main() {
    let vec1 = vec![1.0, 2.0, 2.1, 0.6];

    let mut file = File::create("results.json").unwrap();
    let data = serde_json::to_string(&vec1).unwrap();

    // 调用as_bytes()方法把String转为&[u8],用write_all保证完整写入
    file.write_all(data.as_bytes()).unwrap();
}

方案2:直接使用serde_json内置写入方法(更推荐)

serde_json提供了直接向写入器(实现了Write trait的类型,包括File)序列化的方法to_writer,不需要手动处理序列化字符串和写入步骤,代码更简洁:

use std::fs::File;
use serde_json;

fn main() {
    let vec1 = vec![1.0, 2.0, 2.1, 0.6];
    let file = File::create("results.json").unwrap();
    serde_json::to_writer(file, &vec1).unwrap();
}
依赖确认

请确保你的Cargo.toml中已经添加serde_json依赖:

[dependencies]
serde_json = "1.0"

内容的提问来源于stack exchange,提问作者AlgoQ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:39:02