Как разделить данные из гипер JSON тела, чтобы у меня была хэш-карта с несколькими ключами и значениями? - PullRequest
0 голосов
/ 24 марта 2020

Мне удалось извлечь данные из метода POST в гипере, используя следующее:

use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Method, Request, Response, Server};
use std::convert::Infallible;
use std::net::SocketAddr;
use tokio;

async fn handle(_req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
    match (_req.method(), _req.uri().path()) {
        (&Method::GET, "/") => Ok(Response::new(Body::from("this is a get"))),

        (&Method::POST, "/") => {
            let byte_stream = hyper::body::to_bytes(_req).await?;
            let _params = form_urlencoded::parse(&byte_stream)
                .into_owned()
                .collect::<HashMap<String, String>>();

Однако все тело JSON - это всего лишь один ключ в HashMap сейчас. Как мне его разделить, чтобы у меня была хэш-карта с несколькими ключами и значениями, а не с одним ключом во всем теле?

[dependencies]
futures = "0.1"
hyper = "0.13"
pretty_env_logger = "0.3.1"
url = "2.1.1"
tokio = { version = "0.2", features = ["macros", "tcp"] }
bytes = "0.5"

1 Ответ

2 голосов
/ 24 марта 2020

Существует расхождение между вашим описанием:

Однако в целом JSON тело

А Ваш код:

let _params = <strong><em>form_urlencoded</em></strong>::parse(&byte_stream)

Если ваши данные JSON, то проанализируйте их как JSON, используя serde_json ящик :

let _params: HashMap<String, String> = serde_json::from_slice(&byte_stream).unwrap();
...