Lam*_*bda 149 java json escaping
手动创建JSON数据时,如何转义字符串字段?我应该使用类似的Apache Commons Lang中的StringEscapeUtilities.escapeHtml,StringEscapeUtilities.escapeXml或者我应该使用java.net.URLEncoder?
问题在于,当我使用时SEU.escapeHtml,它不会转义引号,当我将整个字符串包装在一对's中时,将生成格式错误的JSON.
Tha*_*tos 152
理想情况下,在您的语言中找到一个JSON库,您可以提供一些适当的数据结构,并让它担心如何逃避.它会让你更加理智.如果由于某种原因你没有使用你的语言库,你不想使用它(我不会建议这个¹),或者你正在编写一个JSON库,请继续阅读.
根据RFC逃脱它.JSON是相当宽松:你唯一的字符必须逃脱的\,"和(不是U + 0020少任何东西)控制代码.
这种转义结构特定于JSON.您需要一个特定于JSON的功能.所有逃逸的可以写成\uXXXX其中XXXX是该字符的UTF-16代码unit¹.有一些快捷方式,例如\\,也可以使用.(它们会产生更小更清晰的输出.)
有关完整详细信息,请参阅RFC.
¹JSON的转义是建立在JS,所以它使用\uXXXX,这里XXXX是一个UTF-16代码单元.对于BMP之外的代码点,这意味着编码代理对,这可能会有点毛茸茸.(或者,您可以直接输出字符,因为JSON的编码是Unicode文本,并允许这些特定字符.)
Mon*_*ded 53
从Jettison中提取:
public static String quote(String string) {
if (string == null || string.length() == 0) {
return "\"\"";
}
char c = 0;
int i;
int len = string.length();
StringBuilder sb = new StringBuilder(len + 4);
String t;
sb.append('"');
for (i = 0; i < len; i += 1) {
c = string.charAt(i);
switch (c) {
case '\\':
case '"':
sb.append('\\');
sb.append(c);
break;
case '/':
// if (b == '<') {
sb.append('\\');
// }
sb.append(c);
break;
case '\b':
sb.append("\\b");
break;
case '\t':
sb.append("\\t");
break;
case '\n':
sb.append("\\n");
break;
case '\f':
sb.append("\\f");
break;
case '\r':
sb.append("\\r");
break;
default:
if (c < ' ') {
t = "000" + Integer.toHexString(c);
sb.append("\\u" + t.substring(t.length() - 4));
} else {
sb.append(c);
}
}
}
sb.append('"');
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
dpe*_*uha 36
试试这个org.codehaus.jettison.json.JSONObject.quote("your string").
在此处下载:http://mvnrepository.com/artifact/org.codehaus.jettison/jettison
Dan*_*Dev 23
org.json.simple.JSONObject.escape()转义引号,\,/,\ r,\n,\ b,\ f,\ t和其他控制字符.它可用于转义JavaScript代码.
import org.json.simple.JSONObject;
String test = JSONObject.escape("your string");
Run Code Online (Sandbox Code Playgroud)
NS *_*oit 21
Apache commons lang现在支持这一点.只需确保您的类路径上有最新版本的Apache commons.你需要3.2+版本
版本3.2的发行说明
LANG-797:将escape/unescapeJson添加到StringEscapeUtils.
I.G*_*ual 10
org.json.JSONObject quote(String data) 方法完成这项工作
import org.json.JSONObject;
String jsonEncodedString = JSONObject.quote(data);
Run Code Online (Sandbox Code Playgroud)
摘自文档:
将数据编码为JSON字符串.这适用于引号和任何必要的字符转义.[...] Null将被解释为空字符串
小智 6
StringEscapeUtils.escapeJavaScript/也StringEscapeUtils.escapeEcmaScript应该做的伎俩.
如果您使用的是 fastexml jackson,则可以使用以下内容:
com.fasterxml.jackson.core.io.JsonStringEncoder.getInstance().quoteAsString(input)
如果您使用的是 codehaus jackson,则可以使用以下内容:
org.codehaus.jackson.io.JsonStringEncoder.getInstance().quoteAsString(input)
| 归档时间: |
|
| 查看次数: |
350308 次 |
| 最近记录: |