【问题标题】:serde_json::from_str error where string from fileserde_json::from_str 错误,其中字符串来自文件
【发布时间】:2016-09-02 03:19:03
【问题描述】:
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);
   |>                 ^^^^^^^^^^^^^^^^^^^^

【问题讨论】:

    标签: json parsing generics rust serde


    【解决方案1】:

    要修复它,您需要告诉编译器您期望 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2022-11-21
      • 2011-03-31
      相关资源
      最近更新 更多