[英]serde_json::from_str error where string from file
extern crate serde_json;
use serde_json::Value;
use std::fs::File;
use std::io::prelude::*;
fn main() {
let filepath = "./map/test/anhui.txt";
match File::open(filepath) {
Err(why) => println!("Open file failed : {:?}", why.kind()),
Ok(mut file) => {
let mut content: String = String::new();
file.read_to_string(&mut content);
println!("{}", &mut content);
serde_json::from_str(&mut content);
}
}
}
错误信息:
error: unable to infer enough type information about `_`; type annotations or generic parameter binding required [--explain E0282]
--> src/main.rs:16:17
|>
16 |> serde_json::from_str(&mut content);
|> ^^^^^^^^^^^^^^^^^^^^
要解决此问题,您需要告诉编译器您期望的类型是serde_json::from_str
。 所以你可以改变线
serde_json::from_str(&mut content);
至
serde_json::from_str::<Value>(&mut content);
之所以需要指定类型,是因为serde_json::from_str
是一个泛型函数,需要将一个类型实例化为具体函数。 通常rustc会处理它,并推断您要使用的类型,但是在这种情况下,没有足够的信息让编译器为您推断它,因为类型仅在函数的结果中引用,而结果永远不会在给定的代码中使用。
您可能还想使用from_str
表达式的结果,否则函数调用将不执行任何操作。 如果在使用let绑定时指定类型,则编译器将能够推断出该类型,如下所示:
let result: Value = serde_json::from_str(&mut content);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.