是否可以同时获取 reqwest 响应的文本和 JSON

Qwe*_*tie 8 rust reqwest

从 reqwest 文档中,您可以获取反序列化的 json或请求响应中的正文。

我不知道如何同时获得它们。我的要求是我想要解码后的 json 在代码中使用,但想要打印出文本以进行调试。不幸的是,尝试获取这两个函数会给您带来有关使用移动值的错误,因为这两个函数都拥有请求的所有权。克隆请求似乎也不可能。

这是我希望能够执行的操作的示例,但第 4 行无效,因为它使用了在第 1 行移动的响应。

let posts: Vec<Post> = match response.json::<PostList>().await {
    Ok(post_list) => post_list.posts,
    Err(e) => {
        let text = response.text().await.unwrap();
        println!("Error fetching posts: {}, {}", e, text);
        Vec::new()
    }
}; 
Run Code Online (Sandbox Code Playgroud)

Max*_*nko 12

json()不能在同一响应上调用和的原因text()是,这两种方法都必须读取整个响应流,并且只能执行一次。

这里最好的选择是首先将其读入 a String,然后从该字符串中解析 JSON:

let response_text = response.text().await.unwrap();
let posts: Vec<Post> = match serde_json::from_str::<PostList>(&response_text) {
  ...
}
Run Code Online (Sandbox Code Playgroud)