我们正在使用Spring MVC和Freemarker作为模板语言构建一个RESTful API。我们选择在Freemarker中构建JSON响应。
示例freemarker.ftl:
示例freemarker.ftl:
{
"field1" : "${response.value1}",
"field2" : "${response.value2}"
}
当值中的字符串包含引号(或者JSON语法中的任何其他字符)时,我们会遇到问题。
问题是:如何使用freemarker转义这些字符串?
我们已经尝试过?xml
或?html
,但它们并不涵盖所有相关字符(比如\
)。
编辑:?js_string
可以将字符串转义为符合JavaScript标准的形式。由于JSON基于JavaScript(JavaScript对象表示法)开发,因此它也能够解决该问题。
编辑2:如果出现单引号,?js_string
会对其进行转义,从而导致JSON无效。解决方法是:
${variable?js_string?replace("\\'", "\'")}
如果你真的很挑剔:
${variable?js_string?replace("\\'", "\'")?replace("\\>",">")}
如果您使用Spring,则可以选择以下方式:http://www.springsurf.org/sites/1.0.0.M3/spring-webscripts/spring-webscripts-documentation/reference/html-single/index.html#js-api-index-org.springframework.extensions.webscripts.json.jsonutils
${variable?js_string?replace('\\'', '\'')}
。 - stevevls