我正在对某个 API 进行 GET 调用,该 API 会返回 JSON 对象的 list
。但是,我无法将其解析为自定义数据结构列表。
离我最近的地方
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| {
...
})
最佳答案
为了使用Response::json
,您必须为Pokemon
实现serde::Deserialize
。您可以通过将以下内容添加到您的 Cargo.toml 中的 [dependencies]
下来执行此操作。
serde = { version = "1.0", features = ["derive"] }
然后,在文件顶部添加 use serde::Deserialize;
,并将 Pokemon
的声明更改为:
#[derive(Deserialize)]
struct Pokemon {
id: i32,
name: String,
height: i32,
weight: i32,
}
关于json - 异步解析来自请求 GET 调用的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56684397/