Как я могу получить данные JSON API из ответа Reqwest?
Я хочу получить данные из API:
extern crate reqwest;
use std::io::Read;
pub fn main() {
let mut response = reqwest::get("https://api.fcoin.com/v2/market/ticker/ftbtc")
.expect("Failed to send request");
let mut buf = String::new();
response
.read_to_string(&mut buf)
.expect("Failed to read response");
println!("{}", buf);
}
Выход
{"Статус": 0, "данные":{"тикер": [0.000061730,500.000000000,0.000061730,44411.280000000,0.000061740,917.980000000,0.000080330,0.000086540,0.000060260,7144217252.900000000,554239.734632892500000000], "тип": "ticker.ftbtc","след":2995173}}
Могу ли я передать buf
или ответ в ключе => значение стиля Vec
или массив?
1 ответ
Поскольку ваш API, похоже, использует JSON, вы можете использовать serde_json, это ящик, который позволяет вам анализировать JSON.
extern crate serde_json; // 1.0.21
use serde_json::{Value, Error};
#[macro_use]
extern crate serde_derive;
#[derive(Serialize, Deserialize)]
struct Foo {
status: u8,
data: Data,
}
#[derive(Serialize, Deserialize)]
struct Data {
ticker: Vec<f64>,
#[serde(rename = "type")]
bar: String,
seq: usize,
}
fn main() -> Result<(), Error> {
let buf = r#"
{
"status": 0,
"data": {
"ticker": [
0.000068,
2360.41,
0.00006801,
30445.92,
0.00006889,
1016.86,
0.00008143,
0.00008654,
0.00006026,
7150041272.95,
554611.3932127054
],
"type": "ticker.ftbtc",
"seq": 3001635
}
}"#;
// You could just parse it to Value this is the "quick and dirty way"
let v: Value = serde_json::from_str(buf)?;
println!("{}", v["data"]["ticker"][0]);
// Or you could use a struct to have a strong verification of the data
let foo : Foo = serde_json::from_value(v)?;
// let foo : Foo = serde_json::from_str(buf)?;
println!("{}", foo.data.ticker[0]);
Ok(())
}