json - Clojure API 中正确的 JSON 转义

标签 json clojure compojure

我有一个 Clojure 函数,它将 URL 向量的内容写出为 JSON,并从 API 端点返回该内容。此端点数据由前端应用程序上的 Elm JSON 解码器读取。直接运行这个 Clojure 函数会得到以下结果:

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

返回结果:

"[\"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 中弹出。

write-str 有一个 :escape-slash bool 选项:

: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\"]"

关于json - Clojure API 中正确的 JSON 转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63912106/

相关文章:

javascript - 用节点JS替换文件中的字符

ios - SWIFT - JSON 错误 : The data couldn’t be read because it isn’t in the correct format

javascript - 计算特定属性的 JSON 对象的长度

clojure 不连续的让

clojure - 奇怪的 super war 行为

java - 将包含 JSON 数组的 JSONArray 对象解析为 JSON 数组列表

clojure - 如何在 Clojure 中使用命令行参数?

clojure - 为什么我们在 Clojure 运行时会看到 Arity 相关的异常?

clojure - 如何让 Compojure 收听单个 IP

clojure - 在compojure中实现oauth2,如何在响应用户请求之前等待第二个oauth2回调?