gpt4 book ai didi

clojure - 在 Compojure 中将字节数组转换为 json

转载 作者:行者123 更新时间:2023-12-02 21:48:27 28 4
gpt4 key购买 nike

我正在开发一个提供 json 文件的 Compojure 应用程序。我正在使用 clojure.java.jdbc 库从 sqlite 数据库中检索文件:

(defn grid-result [z x y]
(j/with-connection db-specs
(j/with-query-results results ["SELECT grid FROM grids WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?" z x y]
(doall results))))

查询结果是这样的:

({:grid #<byte[] [B@7e88dd33>})

为了将其显示为 json,我更新了 header ,并将查询结果剥离为字节数组并使用 ByteArrayInputStream:

(defn grid-response [grid]
{:status 200
:headers {"Content-Type" "application/json"}
:body (new java.io.ByteArrayInputStream (:grid (first grid)))})

这是处理请求的方式:

(defroutes app-routes
(GET "/api/:z/:x/:y.grid.json" [z x y] (grid-response (grid-result z x y))
(route/not-found "Page not found"))

以上所有结果:

"xœ«VJ/ÊLQ²ŠVR (éŒ1jĨ£FŒ1jĨ£FŒ1jĨÄEÊPP¨¨ªQl„
Å®€ƒQ#F5b¤«£”ZYÈ�gh`jndaXƒf†æ0†Œa¨[�7ð+k"

我要检索的 Json 格式为:

grid({"keys": ["""], "data": {"105803": {"predicti_9": 0.0257, "prediction": "3B2", "OA01CDOLD": "15UFGH0011"}, "106178": {"predicti_9": 0.0265, "prediction": "6B1", "OA01CDOLD": "15UHFE0001"}, "106171": {"predicti_9": 0.0257, "prediction": "3B2", "OA01CDOLD": "15UHFC0001"}, "105721": {"predicti_9": 0.0257, "prediction": "3B2", "OA01CDOLD": "15UFGC0013"}, "106170": {"predicti_9": 0.0257, "prediction": "3B2", "OA01CDOLD": "15UHFB0001"}}, "grid": ["  ", "  "]});

我也尝试过:

更改网格响应函数以将字节数组转换为字符串:

:body (String. (:grid (first grid)) "UTF-8")

结果((使用或不使用 UTF-8):

x??VJ/?LQ??VR?(?1j??F?1j??F?1j??E?PP????Ql?
???Q#F?5b?????ZY?�gh`jndaX?f??0??a?[�7?

将每个字符映射到 str:

(apply str (map #(char (bit-and % 255)) (:grid (first grid))))

结果:

xœ«VJ/ÊLQ²ŠVR (éŒ1jĨ£FŒ1jĨ£FŒ1jĨÄEÊPP¨¨ªQl„
Å®€ƒQ#F5b¤«£”ZYÈ�gh`jndaXƒf†æ0†Œa¨[�7ð+k

(与 ava.io.ByteArrayInputStream 相同)。

任何有关如何将该字节流转换为 json 的建议都将不胜感激。

最佳答案

网格是用 zlib 压缩的。所以这是我使用的解决方案:

(defn zlib-decompress
[input]
(with-open [input (-> input io/input-stream InflaterInputStream.)]
(slurp input)))

此函数返回 json 的字符串表示形式,因此当我将响应的内容类型设置为“application/json”时,一切正常。

关于clojure - 在 Compojure 中将字节数组转换为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19122906/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com