如何使用Rust中的reqwest get反序列化任意json结构?

29

我完全是个Rust的新手,我正在尝试找出如何从URL端点加载和反序列化一个任意的JSON结构。

在reqwest的README上,相应的示例如下:

use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let resp = reqwest::get("https://httpbin.org/ip")
        .await?
        .json::<HashMap<String, String>>()
        .await?;
        println!("{:#?}", resp);
    Ok(())
}

因此,在这个例子中,目标结构——即一个以字符串为键和字符串为值的HashMap对象——显然是已知的。

但是如果我不知道请求端点收到的结构是什么样子呢?

1个回答

34

你可以使用serde_json::Value

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let resp = reqwest::get("https://httpbin.org/ip")
        .await?
        .json::<serde_json::Value>()
        .await?;
    println!("{:#?}", resp);
    Ok(())
}

你需要将 serde_json 添加到你的 Cargo.toml 文件中。

[dependencies]
...
serde_json = "1"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接