问题描述
我有一个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
布尔选项:
:转义斜线布尔值
如果为true(默认值),则斜杠/被转义为\ /
因此您可以改写
(json/write-str ["http://url.one" "http://url.two"] :escape-slash false)
=> "[\"http://url.one\",\"http://url.two\"]"