मैंने निम्नलिखित का उपयोग करके हाइपर में 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 उत्तर
आपके विवरण के बीच एक विसंगति है:
हालांकि, संपूर्ण JSON निकाय
और आपका कोड:
let _params = form_urlencoded::parse(&byte_stream)
अगर आपका डेटा JSON है, तो उसे serde_json
क्रेट का उपयोग करके JSON के रूप में पार्स करें:
let _params: HashMap<String, String> = serde_json::from_slice(&byte_stream).unwrap();
संबंधित सवाल
नए सवाल
json
JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) मशीन और मानव पठनीय होने के लिए एक क्रमबद्ध डेटा इंटरचेंज प्रारूप है। इस टैग का उपयोग देशी जावास्क्रिप्ट वस्तुओं या जावास्क्रिप्ट ऑब्जेक्ट शाब्दिकों के लिए न करें। इससे पहले कि आप कोई प्रश्न पूछें, एक JSON सत्यापनकर्ता जैसे JSONLint (https://jsonlint.com) का उपयोग करके अपने JSON को मान्य करें।