json-lib转义问题。自己方法把中文转换成十六进制\uXXXX的,输出后自动变成\\了
怎么解决这个问题?或者提供一个更好的JSON库,谢谢。
[最优解释]
json-lib 把\转换为\\是正确的
输出后的结果是js消费 所以字符串中的 \ 必须转义为\\
你可以试着在 页面中alert 你所谓被转义的字符,打印后 发现是只有一个\的
[其他解释]
你说的输出是 在java的控制台输出吧 这时候是 \\
当你把数据在页面js操作的时候 他就是 \ 了
[其他解释]
想看看你的代码是如何实现的。
[其他解释]
public static String escapeUnicode(String s) {
if (s == null) {
return s;
}
char[] chars = s.toCharArray();
char c;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
c = chars[i]; // Ignore ascii character
if (c > 0xff) {
sb.append("\\u").append(Integer.toHexString(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
public static void jsonData(List list) {
JSONObject jsonObj = new JSONObject();
JSONArray jsonArray = new JSONArray();
for (Object tmp : list) {
HashMap tplHm = (HashMap) tmp;
Iterator iter = tplHm.keySet().iterator();
JSONObject jObj = new JSONObject();
while (iter.hasNext()) {
Object key = iter.next();
try {
/*判断是否中文再进行转码
if (isChinese(tplHm.get(key).toString())) {
jObj.element(key.toString(), URLEncoder.encode(tplHm.get(key).toString(), "UTF-8"));
} else {
jObj.element(key.toString(), tplHm.get(key).toString());
}
*/
//不判断,直接转码为十六进制
jObj.element(key.toString(), escapeUnicode(tplHm.get(key).toString()));
} catch (Exception e) {
}
}
jsonArray.add(jObj);
}
jsonObj.element("data", jsonArray);
try {
ServletActionContext.getResponse().getWriter().write(String.valueOf(jsonObj));
} catch (IOException e) {
e.printStackTrace();
}
}