首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用serde读取JSON文件?

如何用serde读取JSON文件?
EN

Stack Overflow用户
提问于 2020-08-30 21:24:31
回答 1查看 1.6K关注 0票数 3

我想读取一个JSON文件并打印它的内容。我正在尝试使用serde板条箱,但我不明白为什么它不能工作:

代码语言:javascript
复制
use serde_json;
use std::fs;

fn main() {
    let path = "./src/input.json";
    let data = fs::read_to_string(path).expect("Unable to read file");
    let res = serde_json::from_str(&data);
    println!("{}", res)
}

我得到的错误是:

代码语言:javascript
复制
the trait std::fmt::Display is not implemented

如何读取JSON文件?有没有更好的方法来做这件事?我在serde文档或其他地方都找不到完整的示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-30 21:41:58

您的代码有两个问题。首先,在解析JSON时没有处理错误。就像read_to_string()返回一个Result,在一切正常的情况下,你必须使用expect()来获取底层的值,同样的道理也适用于serde_json::from_str()

添加缺失的expect()会导致第二个问题,编译器会报错:

代码语言:javascript
复制
error[E0282]: type annotations needed
 --> src/main.rs:7:9
  |
7 |     let res = serde_json::from_str(&data).expect("Unable to parse");
  |         ^^^ consider giving `res` a type

serde_json是强类型的,可以将JSON反序列化为您准备的Rust类型。如果只想检查非类型化的JSON,可以使用serde_json::Value (playground):

代码语言:javascript
复制
use serde_json;
use std::fs;

fn main() {
    let path = "./src/input.json";
    let data = fs::read_to_string(path).expect("Unable to read file");
    let res: serde_json::Value = serde_json::from_str(&data).expect("Unable to parse");
    println!("{}", res)
}

您可以在project page上找到此类示例和更多内容。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63657897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档