14

Clojure / Compojureで、マップをURLクエリ文字列に変換するにはどうすればよいですか?

{:foo 1 :bar 2 :baz 3}

foo=1&bar=2&baz=3

compojureでこれを行うためのユーティリティメソッドはありますか?

4

3 に答える 3

27

はい、これには、Hiccupや独自のstring / join/URLEncoder関数のローリングを含まないユーティリティがすでにあります。

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

Compojureは、ring.util.codecを含むring / ring-coreに依存しているため、すでに使用しています。

于 2012-04-13T13:40:48.933 に答える
8

何かのようなもの:

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

それをする必要があります...

REPLセッション:

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> 
于 2012-03-16T23:12:49.787 に答える
0
(defn to-query [inmap]
    (->> inmap
       (map (fn [[f s]] (str (name f) "=" (java.net.URLEncoder/encode (str s) "UTF-8"))))
       (clojure.string/join '&)
       ))

このコードはキーワードから「:」を削除しますが、キーワードが数字の場合は例外をスローします。

(to-query {:foo 1 :bar 2 :baz 3})
=> "foo=1&bar=2&baz=3"
于 2019-05-14T20:06:23.993 に答える