浅谈json遇到的那些事(1)

json 数据读取

1.按照面向对象的原则
+ 先建立一个VO对象,对象的字段为上述json重的字段,通过typeof 来获取对象的制
+ 用JavaScriptSerializer 来获取对象的值,先建立VO对象,

    JavaScriptSerializer serializer = new JavaScriptSerializer ();
    //result 为上述 json 数据
    TicketVO tk= serializer.Deserialize<TicketVO> (resutl); > 2.自己写程序要解析json,以下是我自己写的一段程序,望不要见笑

    /// <summary>
    /// 获取Json字符串某节点的值
    /// jsonStr 为json 数据
   /// 要获取值的名称
   /// </summary>
   public string GetJsonValue(string jsonStr, string key)
   {
     string result = string.Empty;
     if (!string.IsNullOrEmpty(jsonStr))
     {
        key = "\"" + key.Trim('"') + "\"";
        int index = jsonStr.IndexOf(key) + key.Length + 1;
        if (index > key.Length + 1)
        {
        //先截逗号,若是最后一个,截“}”号,取最小值
        int end = jsonStr.IndexOf(',', index);
        if (end == -1)
        {
        end = jsonStr.IndexOf('}', index);
        }

        result = jsonStr.Substring(index, end - index);
        result = result.Trim(new char[] { '"', ' ', '\'' });
        //过滤引号或空格
        }
        }
        return result;
     } ## json 数据的格式

+问题找到了,下面就来对症下药了

+说了这么多不能通过的原因,那我们就将content_source_url字段进行encode 编码,因为只有这个字段有以上的json 不能通过的字符,

 string content_source_url = "中国";
 byte[] btCN = System.Text.Encoding.Default.GetBytes(content_source_url);
 string strUTF8 = System.Text.Encoding.UTF8.GetString(btCN);

+这样json解析终于可以通过了,然后将json提交到微信服务器,文章上传后,是直接退送给用户的,没有地方可以解码 encode,用户收到的都是乱码字符。既然这个,就只能过滤字符串了。

     Regex reg4=new Regex( @"<(\S*?)[^>]*>");    //去掉字符串中的空格
     Regex reg = new Regex(@"(?i)</?a\b[^>]*>");    //去掉字符串的<a>标签
       Regex reg1=new Regex(@"<img[^>]*?/>");         //去掉img标签
	     Regex reg2=new Regex(@"style=""[^""]*""");     //去掉style标签       string result = reg.Replace(d.content, "");
     result = reg1.Replace (result, "");
	     result = reg2.Replace (result, "");
     result=reg4.Replace(result,"")

这样字符串中的json不能通过的字符都被过滤了,同时html标签都存在,也不会影响用户的正常阅读