2014-06-06 4 views
6

पर पोस्ट अनुरोध मैंने सिनात्रा के साथ एक सरल एपीआई बनाया है जो सबमिट किए गए JSON डेटा के आधार पर एक ईमेल भेजता है। मैं एक फॉर्म बना सकता हूं, फॉर्म के माध्यम से JSON डेटा जमा कर सकता हूं, और ईमेल के विषय, विषय और निकाय को प्राप्त करने के लिए पैराम एक्सेस कर सकता हूं। हालांकि, मैं एपीआई का परीक्षण करने के लिए curl का उपयोग करने की कोशिश कर रहा हूं और काम करने के लिए चीजें नहीं लग रहा है। मुझे लगता है कि curl अनुरोध में मेरा स्वरूपण बस्ट किया गया है। नीचे एक कर्ल अनुरोध है जिसके साथ मैंने पैराम के आउटपुट के साथ-साथ JSON मणि के साथ पैरा को पार्स करने का प्रयास किया है।सीनाल के माध्यम से जेएसओएन भेजना सिनात्रा

मुझे एक विशाल कुंजी के साथ पैरा मिलते हैं जो कि मेरे JSON डेटा की एक स्ट्रिंग है जो शून्य के मूल्य के साथ है। मैंने सामग्री-प्रकार जोड़ने का प्रयास किया है: एप्लिकेशन/जेसन, और जब मैं ऐसा करता हूं, तो पैरा खाली होता है।

curl -X POST -H "Accept: application/json" -d '{ "to": "Brantley <[email protected]>", "subject": "hello world", "body": "Hi Jennifer! Sending you an email via this API I just made." }' http://localhost:9393/send-email 

यहाँ पैरामीटर हैश कि लौटा दिया जाता है ...

{"{ \"to\": \"Brantley <[email protected]>\", \"subject\": \"hello world\", \"body\": \"Hi Jennifer! Sending you an email via this API I just made.\" }"=>nil} 

मैं JSON पैरामीटर के साथ और अधिक उपयोगी कुछ करने के लिए इस परिवर्तित करने का प्रयास करें, और उसके बाद मैं निम्नलिखित मिल ... है

{\"{ \\\"to\\\": \\\"Brantley <[email protected]>\\\", \\\"subject\\\": \\\"hello world\\\", \\\"body\\\": \\\"Hi Jennifer! Sending you an email via this API I just made.\\\" }\":null}" 

मैंने इस पर एक ठोस दिन बिताया है, इसी तरह के मुद्दों के बारे में 20 स्टैक ओवरफ्लो पोस्टिंग पढ़ी है, और अभी भी स्टंप हो गया है, इसलिए कोई सलाह उपयोगी होगी। चीयर्स!

+0

कर्ल कमांड पहली नज़र में ठीक लगता है। सिनात्रा कोड को देखे बिना हम आपकी मदद नहीं कर सकते हैं। कृपया एक न्यूनतम उदाहरण डालें जो समस्या को प्रदर्शित करता है। –

+0

मुझे मिल गया ... परम के साथ चारों ओर मूर्खता की जरूरत नहीं है। मैं निम्नलिखित कर कर JSON पेलोड को हैश के रूप में प्राप्त कर सकता हूं ... पेलोड = JSON.parse (request.body.read) –

+0

कृपया नीचे दिए गए उत्तर को जोड़ें और स्वीकृत के रूप में चिह्नित करें। धन्यवाद! –

उत्तर

10

मुझे यह मिला ... परम के साथ बेवकूफ़ बनाने की कोई ज़रूरत नहीं है। मैं निम्नलिखित कर कर JSH पेलोड को हैश के रूप में प्राप्त कर सकता हूं ...

payload = JSON.parse(request.body.read) 
+0

रैक contrib मॉड्यूल रैक :: PostBodyContentTypeParser यह भी आपके लिए यह करेगा। रैक पैरामीटर हैश को अनुरोध निकाय में प्रदान किए गए JSON डेटा को deserializing द्वारा पॉप्युलेट किया जाता है जब सामग्री-प्रकार एप्लिकेशन/जेसन होता है। Https://github.com/rack/rack-contrib देखें – nateware

संबंधित मुद्दे