我正在尝试向需要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
但是,他们的数量是偶数。
答案 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