Как преобразовать карту в строку запроса URL-адреса в Clojure/Compojure/Ring? В Clojure/Compojure, как преобразовать карту в строку запроса URL? {:foo 1 :bar 2 :baz 3} к foo=1&bar=2&baz=3 Есть ли какой-либо метод полезности для этого в compojure? Ответ 1 Да, для этого уже есть утилита, которая не включает в себя 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, поэтому вы уже имеете его. Ответ 2 Что-то вроде: (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> Ответ 3 (defn to-query [inmap] (->> inmap (map (fn [[f s]] (str (name f) "=" (URLEncoder/encode (str s) "UTF-8")))) (join '&) )) Этот код удаляет ":" из ключевых слов, но выдает исключение, если ключевые слова являются числами. (to-query {:foo 1 :bar 2 :baz 3}) => "foo=1&bar=2&baz=3"
Ответ 1 Да, для этого уже есть утилита, которая не включает в себя 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, поэтому вы уже имеете его.
Ответ 2 Что-то вроде: (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>
Ответ 3 (defn to-query [inmap] (->> inmap (map (fn [[f s]] (str (name f) "=" (URLEncoder/encode (str s) "UTF-8")))) (join '&) )) Этот код удаляет ":" из ключевых слов, но выдает исключение, если ключевые слова являются числами. (to-query {:foo 1 :bar 2 :baz 3}) => "foo=1&bar=2&baz=3"