手动创建JSON数据时,应如何转义字符串字段?我应该用什么样的Apache Commons Lang中的StringEscapeUtilities.escapeHtml,StringEscapeUtilities.escapeXml或者我应该使用java.net.URLEncoder?
StringEscapeUtilities.escapeHtml
StringEscapeUtilities.escapeXml
java.net.URLEncoder
问题是,当我使用时SEU.escapeHtml,它不会转义引号,并且当我将整个字符串包装在一对's中时,将生成格式错误的JSON。
SEU.escapeHtml
'
理想情况下, 找到一种使用您的语言的JSON库 ,您可以向该 库 提供一些适当的数据结构, 并使它担心如何转义 。它会让您保持头脑清醒。如果出于某种原因您没有使用您的语言的库,或者不想使用一个库(我不建议这样做¹),或者您正在编写JSON库,请继续阅读。
根据RFC对其进行转义。JSON是相当宽松:你唯一的字符 必须 逃脱是\,"和控制代码(东西不是U + 0020以下)。
\
"
这种转义结构特定于JSON。您将需要JSON特定功能。所有逃逸的可以写成\uXXXX其中XXXX是该字符的UTF-16代码unit¹。有一些快捷方式也可以使用,例如\\。(它们导致更小,更清晰的输出。)
\uXXXX
XXXX
\\
有关详细信息,请参见RFC。
¹JSON的转义是基于JS构建的,因此它使用\uXXXX,其中XXXX为UTF-16代码单元。对于BMP之外的代码点,这意味着对代理对进行编码,这可能会有些毛茸茸。(或者,您可以直接输出字符,因为JSON的编码是Unicode文本,并且允许这些特殊字符。)