在 Clojure 中正确 JSON 转义 API

Proper JSON Escaping in Clojure API

我有一个 Clojure 函数,可以将 URL 向量的内容写到 JSON,returns 从 API 端点写出。此端点数据由前端应用程序上的 Elm JSON 解码器读取。 运行 这个 Clojure 函数直接给我以下内容:

(json/write-str ["http://www.example.com?param=value" "http://www.example2.com?param=value"])

哪个returns:

"[\"http:\/\/www.example.com?param=value\",\"http:\/\/www.example2.com?param=value\"]"

太棒了!如果我将这个结果直接输入到 Elm 解码器中,如下所示:

stringArrayDecoder : Json.Decoder.Decoder (List String)
stringArrayDecoder =
Json.Decoder.list Json.Decoder.string

它解析得很愉快,没有错误。

但是,当我从端点查看 JSON 响应时,它丢失了一些转义,我得到了这个:

["http:\/\/www.example.com?param=value","http:\/\/www.example2.com?param=value"]

我的 Elm 解码器无法读取。

如何避免这种情况?如何通过 API 端点将我的内部函数生成的完全转义的 JSON 值获取到我的 Elm 前端解码器中?

JSON 允许您 escape forward slashes / 和其他字符以防止像 </ 这样的东西在 html.[=18= 中弹出]

write-str 有一个 :escape-slash 布尔选项:

:escape-slash boolean

If true (default) the slash / is escaped as \/

因此你可以改写

(json/write-str ["http://url.one" "http://url.two"] :escape-slash false)
=> "[\"http://url.one\",\"http://url.two\"]"