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

2 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"})}}))
Run Code Online (Sandbox Code Playgroud)

我有一个错误:

Exception in thread "main" java.lang.RuntimeException: Map literal must contain an even number of forms 
Run Code Online (Sandbox Code Playgroud)

但是,它们的数量是偶数.

Mar*_*her 5

问题出在这里:

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

没有与函数调用配对.

:body有一个地图作为一种价值,但你只有一个函数在那里,它的价值不是一个可能的密钥,或者如果这是关键,有没有它的价值.

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

{:body (json/write-str {:key "fdsfdsfdsfd"})}
Run Code Online (Sandbox Code Playgroud)

编辑后编辑:

你问为什么网站上例子正在使用地图.仔细查看正在使用的值,它是一个字符串

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

地图由键/值对组成.首先是

key = :basic-auth, value = ["user" "pass"]
Run Code Online (Sandbox Code Playgroud)

这里的值是一个数组.

第二行是:

key = :body, value = "any old string"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,字符串是一个转义映射,与调用返回的映射相同 json/write-str