2012-03-16 12 views
11

क्लोजर/कंपोज़र में, मैं मानचित्र को URL क्वेरी स्ट्रिंग में कैसे परिवर्तित करूं?क्लोजर/कंपोजर/रिंग में मानचित्र को क्वेरी क्वेरी स्ट्रिंग में कैसे परिवर्तित करें?

{:foo 1 :bar 2 :baz 3} 

foo=1&bar=2&baz=3 

को

वहाँ compojure में यह करने के लिए किसी भी उपयोगिता विधि है?

+0

[घटक भागों से यूआरएल की क्लोजर बिल्डिंग] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3644125/clojure-building-of-url-from-constituent-parts) –

उत्तर

18

हाँ, वहाँ इस के लिए एक उपयोगिता पहले से ही उस को शामिल नहीं करता हिचकी या है अपनी खुद की स्ट्रिंग/जॉइन/यूआरएलएनकोडर फ़ंक्शन रोलिंग:

user=> (ring.util.codec/form-encode {:foo 1 :bar 2 :baz 3}) 
"foo=1&bar=2&baz=3" 
user=> 

कंपोजर रिंग/रिंग-कोर पर निर्भर करता है, जिसमें ring.util.codec शामिल है, इसलिए आपके पास पहले से ही है।

6

कुछ की तरह:

(defn params->query-string [m] 
    (clojure.string/join "&" (for [[k v] m] (str (name k) "=" v)))) 

यह करना चाहिए ...

आरईपीएल सत्र:

user> (defn params->query-string [m] 
     (clojure.string/join "&" 
      (for [[k v] m] 
       (str (name k) "=" (java.net.URLEncoder/encode v))))) 
#'user/params->query-string 
user> (params->query-string {:foo 1 :bar 2 :baz 3}) 
"foo=1&bar=2&baz=3" 
user> 
+4

मैं 'जावा' का भी उपयोग कर सकता हूं। मानचित्र में प्रत्येक मान पर net.URLEncoder.encode', यानी '([[केवी] एम] के लिए (str (name k)" = "(java.net.URLEncoder/encode v)) '। – user100464

+0

मैंने वही किया, लेकिन क्या ऐसा करने के लिए कोई उपयोगिता विधि है? – Sathish

+8

@ साथिश [हिचक] [http://weavejester.github.com/hiccup/) कुछ [प्रासंगिक कार्यक्षमता] प्रदान करता है (http://weavejester.github.com/hiccup/hiccup.util.html#var-url): '(hiccup.util/url"/हैलो "{: ए 1: बी 2}) =>"/हैलो? ए = 1 और बी = 2 "'। यदि आप केवल एक ही उपयोगिता फ़ंक्शन के लिए हिचक पर निर्भरता नहीं जोड़ना चाहते हैं, तो फ़ंक्शन लिखना वास्तव में एक बड़ा सौदा नहीं है। –

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