我正在尝试对需要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
但是,它们的数量是偶数.
问题出在这里:
{:body { (json/write-str {:key "fdsfdsfdsfd"}) }} ^-- single item missing value? --^ ^----- this is a map too
没有与函数调用配对.
该:body
有一个地图作为一种价值,但你只有一个函数在那里,它的价值不是一个可能的密钥,或者如果这是关键,有没有它的价值.
您可能想要删除外部地图括号并离开:
{:body (json/write-str {:key "fdsfdsfdsfd"})}
编辑后编辑:
你问为什么网站上的例子正在使用地图.仔细查看正在使用的值,它是一个字符串
(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