Вы отправляете неправильное количество аргументов на cheshire.core/parse-smile
. У вас есть образец данных?
Пожалуйста, также держите ваш код чистым и отформатированным, например:
(defn- json->messages
[json]
(let [records (:amazon.aws.sqs/records (cheshire/decode json :key-fn key-reader :value-fn value-reader))
add-origin-queue (fn [record]
(let [event-source-arn (:amazon.aws.sqs/event-source-arn record)
queue-name (arn->queue-name event-source-arn)]
(assoc record :amazon.aws.sqs/queue-name queue-name)))]
(map add-origin-queue records)))
Я не смог найти decode
в Чеширской документации, но в источнике есть:
(def decode "Alias to parse-string for clojure-json users" parse-string)
Я разочарован в их неполных документах.
Быстрый Google показывает документы:
(parse-string string & [key-fn array-coerce-fn])
Returns the Clojure object corresponding to the given JSON-encoded string.
An optional key-fn argument can be either true (to coerce keys to keywords),
false to leave them as strings, or a function to provide custom coercion.
The array-coerce-fn is an optional function taking the name of an array field,
and returning the collection to be used for array values.
Это может быть не совсем понятно. Это означает, что есть 3 законных способа звонить parse-string
:
(parse-string <json-str>)
(parse-string <json-str> <key-fn>)
(parse-string <json-str> <key-fn> <array-coerce-fn>)
Так что вы можете назвать это с 1, 2 или 3 аргументами. Вы не можете добавить в :key-fn
или :value-fn
ключи карты, как в вашем примере.
Также обратите внимание, что ваши key-reader
и value-reader
выглядят так, как будто они не соответствуют ожидаемому чеширом / read-string .