地图文字必须包含偶数个表格

时间:2016-01-10 11:14:41

标签: clojure

我正在尝试向需要json和密码(:key)

中的数据的Web服务进行处理。
(ns fdsfdsfds.core
  (:require [clj-http.client :as client])
  (:require [clojure.data.json :as json]))


(defn -main [& args]
  (client/post "https://fsdfdsfd.com/api/fdsfds" 
    {:body {(json/write-str {:key "fdsfdsfdsfd"})}}))

我遇到了错误:

Exception in thread "main" java.lang.RuntimeException: Map literal must contain an even number of forms 
但是,他们的数量是偶数。

1 个答案:

答案 0 :(得分:5)

问题在于:

 {:body {    (json/write-str {:key "fdsfdsfdsfd"})     }}
             ^-- single item       missing value? --^
        ^----- this is a map too

没有与函数调用配对。

:body有一个地图作为一个值,但你只有一个函数,而不是它的值的可能键,或者如果这是键,它就没有价值。

您可能想要删除外部地图括号并离开:

{:body (json/write-str {:key "fdsfdsfdsfd"})}

评论后编辑:

你问为什么example on the site正在使用地图。仔细查看正在使用的值,它是一个字符串

(client/post "url://site.com/api"
  {:basic-auth ["user" "pass"]
   :body "{\"json\": \"input\"}"
   ;; ...

地图由键/值对组成。第一个是

key = :basic-auth, value = ["user" "pass"]

这里的值是一个数组。

第二行是:

key = :body, value = "any old string"

在这种情况下,字符串是转义映射,与调用json/write-str

时返回的映射相同