gpt4 book ai didi

json - 如何将字节流从 reqwest 响应反序列化为 JSON?

转载 作者:行者123 更新时间:2023-12-03 11:25:26 24 4
gpt4 key购买 nike

通过 reqwest 的请求需要长轮询响应,因此我创建了一个字节流并尝试将每个块反序列化为 JSON。我立即意识到这是错误的,因为每个块都可能不完整,因此反序列化可能会失败;尽管一些块被反序列化为 JSON,但大多数都失败了。我该怎么做呢?

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let mut stream = client
.get("https://...")
.send()
.await?
.bytes_stream();

while let Some(chunk) = stream.next().await {
match serde_json::from_slice::<Value>(&chunk?){
Ok(value) => println!("OK: {:?}", value),
Err(e) => println!("ERROR: {:?}", e),
}
};

Ok(())
}

最佳答案

如果您启用功能 json来自 reqwest您的图书馆 Cargo.toml .然后你可以将代码简化为:

let json = client
.get("https://...")
.send()
.await?
.json::<T>() //T needs to implement serde::de::DeserializeOwned
.await?;

这将发送请求并自动将其转换为 JSON。自 json 方法内部使用 serde_json::from_reader ,它还将字节流反序列化为结构体。

如果响应正文不是 JSON 格式或无法正确反序列化为 T,这将失败。 .

关于json - 如何将字节流从 reqwest 响应反序列化为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60197787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com