繁体   English   中英

serde_json :: from_str错误,文件中的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM