【问题标题】:How do I serialize from request's Response with JSON into a typed struct?如何使用 JSON 将请求的响应序列化为类型化结构?
【发布时间】:2020-09-22 16:20:32
【问题描述】:

我不明白如何将 requests::Response 转换为 serde JSON 对象。我试过这个:

extern crate requests;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;

fn get_json() -> requests::Response {
    let response = requests::get("Fancy URL").unwrap();

    return response;
}

#[derive(Serialize, Deserialize)]
struct MyStruct {
    iso: String,
    number: String,
    name: String,
}

fn main() {
    let data = get_json();
    let res = serde_json::from_reader(data);

    if res.is_ok() {
        let p: MyStruct = res.unwrap();
        println!("The name is {}", p.name);
    } else {
        println!("Could not parse JSON!")
    }
}

【问题讨论】:

  • crate requests 3 年没有更新了。考虑改用reqwest,然后按照其文档检索完整的响应正文。
  • 很难回答您的问题,因为它不包含minimal reproducible example。我们无法分辨代码中存在哪些 crate(及其版本)。如果您尝试在一个全新的 Cargo 项目中重现您的错误,我们会更轻松地为您提供帮助,然后 edit 您的问题将包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!

标签: json rust serde


【解决方案1】:

您可以找到an example。这样的事情可能会奏效:

let p: MyStruct = serde_json::from_str(data).unwrap();

【讨论】:

  • 这样的东西应该可以工作——提供一个你确定工作的经过测试的例子会更有用。
猜你喜欢
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多