कर्ल का उपयोग करके एक सरणी के साथ एक जसन ऑब्जेक्ट को कैसे थपकाएं


94

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

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) [ग्लोबिंग] नेस्टेड ब्रेसेस पॉज़ एक्स पर समर्थित नहीं हैं

जहाँ X पहले "[" का वर्ण स्थिति है।

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

जवाबों:


147

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

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

4
-1 क्योंकि कंटेंट-टाइप (एक्सेप्ट के बजाय) हेडर है जिसे इस मामले में सेट किया जाना चाहिए।
गोरान

3
जो लोग सोच रहे हैं, [JSON] केवल JSON स्ट्रिंग के लिए एक प्लेसहोल्डर है। अपने JSON स्ट्रिंग के आसपास अतिरिक्त वर्गाकार कोष्ठक न जोड़ें।
मिहाई टोडर

89

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

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

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

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


3
यह मेरे लिए सही समाधान था, -gउम्मीद के मुताबिक काम किया। धन्यवाद @Yonik
arjones

2
मेरी अच्छाई, मैं अपने ग्राफकैल कर्ल समस्या के समाधान की तलाश कर रहा हूं और इससे मुझे मदद मिली। अद्भुत सॉस।
नेटऑपरेटर विब्बी

39

यह उल्लेख किया जाना चाहिए कि Acceptहेडर सर्वर को उस चीज के बारे में बताता है जिसे हम वापस स्वीकार कर रहे हैं, जबकि इस संदर्भ में संबंधित हेडर हैContent-Type

यह अक्सर निर्दिष्ट करने के लिए सलाह दी जाती है Content-Typeके रूप में application/jsonजब 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`

2

-G के साथ-साथ दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरण का उपयोग करने का प्रयास करें

परिदृश्य के बाद मेरे लिए काम किया

curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

साथ में

curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

यह विशेष रूप से मेरी त्रुटि कर्ल कमांड त्रुटि को हल करता है : खराब यूआरएल बृहदान्त्र पहला चरित्र है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.