JSON数据的处理中的特殊字符,json数据特殊字符
JSON现在是很常见的处理数据的方式了。但由于自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台
var obj = jQuery.parseJSON(msg);会转换失败。
例如如下在Vs中可以看到只有两个字符
可实际上却有三个字符,使用notepad++打开
一直不明白这些字符是如何进入数据库的,但进入了,就必须处理,否则在前台就会转换失败,导致数据加载失败。
很长时间以为是由于用户复制了一些其他编码的文字,在中文中没有对应的编码,导致的错误。这次又出现了,于是又仔细研究了一下,发现原来是ASCⅡ表中的控制字符!!
明白了这个处理自然就很简单了。
后台反射转化为JSON的代码:
private static string getValue<T>(T t, string pname) where T : class { Type type = t.GetType(); PropertyInfo pinfo = type.GetProperty(pname); if (pinfo != null) { object v = pinfo.GetValue(t, null); return v != null ? v.ToString() : ""; } else { throw new Exception("不存在属性" + pname); } } protected static string ConvertFromModeTojson<T>(T t, string columnInfos) where T : class { string[] cols = columnInfos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); System.Text.StringBuilder sb = new System.Text.StringBuilder(300); string result = "{"; foreach (string col in cols) { string name = "\"{0}\":\"{1}\","; string value = getValue<T>(t, col); value = String2Json(value); sb.Append(string.Format(name, col, value)); } result += sb.ToString().TrimEnd(','); result += "}"; return result; } /// <summary> /// 过滤特殊字符 /// </summary> /// <param name="s"></param> /// <returns></returns> private static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '/': sb.Append("\\/"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '\n': sb.Append("\\n"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; default: if ((c >= 0 && c <= 31)||c ==127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符 { } else { sb.Append(c); } break; } } return sb.ToString(); }控制字符
怎处理JSON中的特殊字符
由于 Ajax 应用程序非常适合将纯文本发送给服务器端程序并对应地接收纯文本,相比不能生成文本的 API,能生成文本的 API 自然更可取;而且,JSON 让您能够处理本地 JavaScript 对象,而无需为如何表示这些对象多费心思。XML 也可以提供文本方面的类似益处,但用于将 JavaScript 对象转换成 XML 的几个现有 API 没有 JSON API 成熟;有时,您必须在创建和处理 JavaScript 对象时格外谨慎以确保所进行的处理能与所选用的 XML 会话 API 协作。但对于 JSON,情况就大不相同:它能处理几乎所有可能的对象类型,并会返回给您一个非常好的 JSON 数据表示。 因此,JSON 的最大价值在于可以将 JavaScript 真的作为 JavaScript 而非数据格式语言进行处理。1. 回车问题JSON传值的时候,如果有回车符就会挂的。我们可以使用正则来去掉回车符:$str = preg_replace("'([\r\n])[\s]+'", "", $str);// 不用正则$str = str_replace("\n","",$str);转出来的字符串就没有回车符的困扰了。顺便记录一个PHP过滤脚本:<?php// $document 应包含一个 HTML 文档。// 本例将去掉 HTML 标记,javascript 代码// 和空白字符。还会将一些通用的// HTML 实体转换成相应的文本。$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript"'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 标记"'([\r\n])[\s]+'", // 去掉空白字符
json格式怎读取有特殊字符的数据内详
这个是做接口服务端的要在字值的值处理成json之前就应当做转义的动作,把字段里面的值 :冒号及反斜杠\和,逗号统统加上\: \, \" \\ 这样客户端才会正确,以下列出来XML等的格式传递,也会存在相同的问题String s = "a:b,c";s.replace(":","\:").replace(",","\,");
javamessage.replaceAll("<","<").replaceAll(">",">");
html:& 变成 &< 变成 <> 变成 >" 变成 "pading:一般间隔10px
空格用 代替