2013-03-15 9 views
64

का उपयोग कर किसी सरणी के साथ एक जेसन ऑब्जेक्ट को कैसे निकालें I डेटाबेस में प्रवेश करने के लिए डेटा की एक श्रृंखला है। डेटा प्रविष्ट करने के लिए उपयोगकर्ता इंटरफ़ेस थोक प्रविष्टि के लिए अच्छा नहीं है, इसलिए मैं एक कमांड लाइन समकक्ष बनाने की कोशिश कर रहा हूं। जब मैं क्रोम में यूआई के नेटवर्क अनुरोध की जांच करता हूं, तो मुझे एक जेसन ऑब्जेक्ट का पुट अनुरोध दिखाई देता है। जब मैं अनुरोधकर्ल

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service` 

मैं एक त्रुटि

कर्ल पाने को दोहराने के लिए प्रयास करें: (3) [ग्लोबिंग] नेस्ट स्थिति समर्थित नहीं ब्रेसिज़ एक्स

एक्स कहाँ चरित्र है पहले की स्थिति "["।

मैं एक जेसन ऑब्जेक्ट कैसे डाल सकता हूं जिसमें एक सरणी शामिल है?

उत्तर

97

आपकी कमांड लाइन में P12 में भेजने वाली स्ट्रिंग से पहले -d/--data डाला जाना चाहिए, और आप सामग्री-प्रकार सेट करना चाहते हैं और स्वीकार नहीं करना चाहते हैं।

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' http://example.com/service 

सवाल से सटीक JSON डेटा का उपयोग करना, पूर्ण कमांड लाइन बन गयी:

curl -H 'Content-Type: application/json' -X PUT \ 
-d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' \ 
http://example.com/service 
+3

-1 के आधार पर -1 क्योंकि सामग्री-प्रकार (स्वीकृति के बजाए) हेडर है जो इस मामले में सेट किया जाना चाहिए। – Goran

+0

जो सोच रहे हैं उनके लिए, [JSON] JSON स्ट्रिंग के लिए बस प्लेसहोल्डर है। अपने JSON स्ट्रिंग के आस-पास अतिरिक्त स्क्वायर ब्रैकेट्स न जोड़ें। –

+1

shoiuld वास्तविक JSON का उपयोग कर रहे हैं उदाहरण में – bluefloyd8

33

यह उल्लेखनीय है कि Accept हैडर क्या हम वापस स्वीकार कर रहे हैं के बारे में सर्वर में कुछ बताता है, जबकि इस संदर्भ में प्रासंगिक शीर्षलेख Content-Type

अक्सर JS12 भेजते समय Content-Typeapplication/json निर्दिष्ट करने की सलाह दी जाती है। कर्ल के लिए वाक्य रचना है:

-H 'Content-Type: application/json' 

तो पूरा कर्ल आदेश हो जाएगा:

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service` 
50

हालांकि मूल पोस्ट अन्य मुद्दों था (यानी लापता "-d"), त्रुटि संदेश अधिक है सामान्य।

कर्ल: (3) [ग्लोबिंग] नेस्ट ब्रेसिज़ स्थिति एक्स

यह वह जगह है समर्थित नहीं है क्योंकि घुंघराले ब्रेसिज़ {} और वर्ग कोष्ठक [] कर्ल में विशेष ग्लोबिंग पात्र हैं। इस ग्लोबिंग को बंद करने के लिए, "-g" विकल्प का उपयोग करें।

उदाहरण के लिए, निम्नलिखित Solr पहलू क्वेरी ग्लोबिंग कर्ल बंद करने के लिए बिना "जी" असफल हो जायेगी: curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

+0

यह सुनिश्चित किया गया था कि '-g' का उपयोग करके यह मेरे लिए सही समाधान था।धन्यवाद @ योनिक – arjones

+0

मेरी भलाई, मैं अपने ग्राफक्लुएल कर्ल समस्या का हल ढूंढ रहा हूं और इससे मेरी मदद मिली। अद्भुत सॉस। –