从请求GET调用异步解析JSON响应

时间:2019-06-20 10:49:51

标签: json http rust

我正在对某个API进行GET调用,这反过来将使我list返回JSON对象。但是,我无法将其解析为自定义数据结构列表。

最近我可以来

struct Pokemon {
    id: i32,
    name: String,
    height: i32,
    weight: i32,
}

let mut response = client.get("http://pokeapi.co/api/v2/pokemon/111")
    .send()
    .expect("Failed to send request");
if let Ok(pokemon) = response.json::<Pokemon>() {
    println!("{:#?}", pokemon);
}

任何人都可以为我提供合适的例子。另外,这是标准的做法。我的意思是使用

这样的东西会有什么不同
let url = url.parse().expect("API URL parsing bug");
let request = Request::new(reqwest::Method::GET, url);

self.inner
    .execute(request)
    .map_err(Error::Request)
    .and_then(move |response: Response| {
        ...
    })

1 个答案:

答案 0 :(得分:1)

要使用Response::json,必须为serde::Deserialize实现Pokemon。为此,您可以在[dependencies]下的Cargo.toml中添加以下内容。

serde = { version = "1.0", features = ["derive"] }

然后,在文件顶部添加use serde::Deserialize;,并将Pokemon的声明更改为:

#[derive(Deserialize)]
struct Pokemon {
    id: i32,
    name: String,
    height: i32,
    weight: i32,
}