Lyn*_*ynn 4 generics parsing json rust serde
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
要修复它,您需要告诉编译器您期望的结果类型是什么serde_json::from_str。所以你可以改变线路
serde_json::from_str(&mut content);
Run Code Online (Sandbox Code Playgroud)
到
serde_json::from_str::<Value>(&mut content);
Run Code Online (Sandbox Code Playgroud)
您需要指定类型的原因serde_json::from_str是因为泛型函数需要将类型实例化为具体函数。通常 rustc 会处理它,并推断出您想要使用的类型,但在这种情况下,没有足够的信息让编译器为您推断它,因为类型仅在函数的结果中引用,而结果永远不会在给定的代码中使用。
您可能还想使用表达式的结果from_str,否则函数调用不会执行任何操作。如果您在使用 let 绑定时指定类型,编译器将能够推断出该类型,如下所示:
let result: Value = serde_json::from_str(&mut content);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3867 次 |
| 最近记录: |