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
相关产品推荐
相关产品推荐

