在 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\"]"
我有一个 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\"]"