Clojure环包装json参数弄乱了json数组
我目前正在clojure中做一些RESTAPI的工作,我正在使用compojure中的ring.middleware.format库在clojure数据结构之间转换JSON 我有一个很大的问题,在这个问题上,发布到ring应用程序的JSON将用数组中的第一项替换所有数组。也就是说,它将从Clojure环包装json参数弄乱了json数组,clojure,compojure,ring,Clojure,Compojure,Ring,我目前正在clojure中做一些RESTAPI的工作,我正在使用compojure中的ring.middleware.format库在clojure数据结构之间转换JSON 我有一个很大的问题,在这个问题上,发布到ring应用程序的JSON将用数组中的第一项替换所有数组。也就是说,它将从 { "buyer":"Test Name", "items":[ {"qty":1,"size":"S","product":"Red T-Shirt"}, {"
{
"buyer":"Test Name",
"items":[
{"qty":1,"size":"S","product":"Red T-Shirt"},
{"qty":1,"size":"M","product":"Green T-Shirt"}
],
"address":"123 Fake St",
"shipping":"express"
}
对此
{
"buyer": "Test Name",
"items": {
"qty": 1,
"size": "M",
"product": "Green T-Shirt"
},
"address": "123 Fake St",
"shipping": "express"
}
它对任何数组都执行此操作,包括当数组是根元素时
我在clojure中使用以下代码返回json:
(defroutes app-routes
(GET "/"
[]
{:body test-data})
(POST "/"
{data :params}
{:body data}))
;{:body (str "Printing " (count (data :jobs)) " jobs")}))
(def app
(-> (handler/api app-routes)
(wrap-json-params)
(wrap-json-response)))
GET路径与数组和正确输出没有任何问题,因此它必须是我获取数据的方式或wrap restful params
中间件
有什么想法吗?我对环json参数也有类似的问题。因此,我最终使用原始请求体并自己解析JSON字符串 我使用了folliwng代码:
(defroutes app-routes
(POST "/"
{params :body}
(slurp params)))
我使用clj-json.core库解析json
希望这有帮助。如果你找到了更好的方法,请分享。我是Clojure/Compojure新手 我知道已经有一段时间了,但我还是偶然发现了同样的问题。我让它工作的唯一方法是在
compojure.handler/api
之前使用ring.middleware.format/wrap restful format
。
我不知道为什么会这样,但如果我先放
compujure.handler/api
包装器,它会弄乱数组参数我最近遇到了这个问题,并实际解决了问题所在:在包装json参数
中间件之后,对包装嵌套参数
中间件进行评估,这会导致存储在JSON数组/Clojure向量中的对象通过抓取其中包含的第一个元素而变平
user=> bod-map
{:address "100 Bush Street", :contacts [{:name "Dudely Mcdooderson", :title "engineer", :tax_id "555"}], :name "Dudely Inc.", :tax_id "5234234"}
user=> (ring.middleware.nested-params/nested-params-request {:params bod-map})
{:params {"tax_id" "5234234", "name" "Dudely Inc.", "contacts" {:name "Dudely Mcdooderson", :title "engineer", :tax_id "555"}, "address" "100 Bush Street"}}
您只需确保在您的中间件订购中首先评估wrap嵌套参数即可解决此问题。谢谢!这很有效。这不是一个理想的解决方案,但它很有效。我同意这不是最好的解决办法。我已经创建了ring json params存储库,并将尝试解决这个问题。你有没有找到问题的根源?我在ring中间件格式中发现了类似的问题,并打开了一个问题: