Rust 命中了一个 API 那 returns 一个数组数组
Rust hit an API that returns an array of arrays
我是 Rust 的新手,正在研究与 Binance 交互的工具 API。 API returns 响应如下:
{
"lastUpdateId": 1027024,
"bids": [
[
"4.00000000", // PRICE
"431.00000000" // QTY
]
],
"asks": [
[
"4.00000200",
"12.00000000"
]
]
}
买价和卖价是一组数组。我必须为 API 响应声明 struct
。
我目前有
use reqwest::Error;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Depth {
lastUpdateId: u32,
bids: Vec<u64>,
asks: Vec<u64>,
}
#[tokio::main]
pub async fn order_book() -> Result<(), Error> {
let request_url = format!("https://api.binance.us/api/v3/depth?symbol=BTCUSD");
println!("{}", request_url);
let response = reqwest::get(&request_url).await?;
println!("Status: {}", response.status());
let depth: Depth = response.json().await?;
println!("{:?}", depth);
Ok(())
}
我认为我声明的出价和询价类型不正确,但我无法确定如何声明数组的数组。我得到 200 的 response.status,但我无法打印出 response.json
。
谢谢!
因为它returns一个数组的数组,你需要嵌套类型。 bids: Vec<Vec<u64>>
应该可以工作,但由于您知道每个内部数组都有两个元素,因此您可以使用 bids: Vec<[u64; 2]>
提高效率 - 固定大小数组的动态大小向量,或 bids: Vec<(u64, u64)>
,一个动态大小的元组向量。您还需要类似地更新 asks
。
您的最终代码可能如下所示:
use reqwest::Error;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Depth {
lastUpdateId: u32,
bids: Vec<(u64, u64)>,
asks: Vec<(u64, u64)>,
}
#[tokio::main]
pub async fn order_book() -> Result<(), Error> {
let request_url = format!("https://api.binance.us/api/v3/depth?symbol=BTCUSD");
println!("{}", request_url);
let response = reqwest::get(&request_url).await?;
println!("Status: {}", response.status());
let depth: Depth = response.json().await?;
println!("{:?}", depth);
Ok(())
}
我是 Rust 的新手,正在研究与 Binance 交互的工具 API。 API returns 响应如下:
{
"lastUpdateId": 1027024,
"bids": [
[
"4.00000000", // PRICE
"431.00000000" // QTY
]
],
"asks": [
[
"4.00000200",
"12.00000000"
]
]
}
买价和卖价是一组数组。我必须为 API 响应声明 struct
。
我目前有
use reqwest::Error;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Depth {
lastUpdateId: u32,
bids: Vec<u64>,
asks: Vec<u64>,
}
#[tokio::main]
pub async fn order_book() -> Result<(), Error> {
let request_url = format!("https://api.binance.us/api/v3/depth?symbol=BTCUSD");
println!("{}", request_url);
let response = reqwest::get(&request_url).await?;
println!("Status: {}", response.status());
let depth: Depth = response.json().await?;
println!("{:?}", depth);
Ok(())
}
我认为我声明的出价和询价类型不正确,但我无法确定如何声明数组的数组。我得到 200 的 response.status,但我无法打印出 response.json
。
谢谢!
因为它returns一个数组的数组,你需要嵌套类型。 bids: Vec<Vec<u64>>
应该可以工作,但由于您知道每个内部数组都有两个元素,因此您可以使用 bids: Vec<[u64; 2]>
提高效率 - 固定大小数组的动态大小向量,或 bids: Vec<(u64, u64)>
,一个动态大小的元组向量。您还需要类似地更新 asks
。
您的最终代码可能如下所示:
use reqwest::Error;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Depth {
lastUpdateId: u32,
bids: Vec<(u64, u64)>,
asks: Vec<(u64, u64)>,
}
#[tokio::main]
pub async fn order_book() -> Result<(), Error> {
let request_url = format!("https://api.binance.us/api/v3/depth?symbol=BTCUSD");
println!("{}", request_url);
let response = reqwest::get(&request_url).await?;
println!("Status: {}", response.status());
let depth: Depth = response.json().await?;
println!("{:?}", depth);
Ok(())
}