乱码字符引起的JSON转换失败

 
 
这种问题有两个解决办法,使用后不管你是什么特殊字符还是什么西欧字体还是什么稀奇古怪的内容都可以完美解决!
 
1.要把即将转换为json的内容先转换为unicode编码,json转换无误后,使用json时,比如展示json里的内容,再将其转换为中文字符
2.这是个偏方法,使用过JSONObject lib 工具的都知道即使是一条乱码内容,依然可以存储到JSONObject里去。我看了它的存储源码,发现它是存储之前,将内容解释后再存储了。这样做得话,不管你什么,我先解释一遍再存储,可以避免存储时因特殊内容出现的问题。既然这样,偷过来它这个工具的特性,我利用它这个功能解释后再转json,自然就没问题了
 
 
总之就是将一切让json转换失败的特殊内容都转义或合法解释掉掉,避免出错
 
 
 
JSONObject 主要是net.sf.json.JSONObject这个类,jar包是json-lib-2.3-jdk15.jar
 
一定要用JSONObject存储后再使用解释方法,这两句代码不是放在这玩的
JSONObject json = new JSONObject();
json.put( "content", content);
 
JSONUtils类里的这个方法
JSONUtils.valueToString(json.get("content"));
 
 
 
第二个版本:
 
这句代码是将内容转成json,任何会引起json转换失败的符号都会被转义,但只是在action里或者是java后台里使用是没有问题的
content = com.zdzddzzd.util.string.StringUtils.string2Json(content);
 
但如果action结果页面里要用,并且要用json来解析的话这就用有问题了,这个方法使用过后,页面直接使用json转换js函数依然还是转换不了,去掉这个方法,使用sh-gs-tskj配置的一个jsp转换json工具,一句代码过后就搞定了,但他们也不能结合一起使用,因为在某些数据上,两次转义后的内容依然还是不可以转换json的,如果是页面展示建议使用jsp转换json工具
 
type="json",这个配置是要在struts文件中配置后才能使用的,transing自搞的一个东西,文件名叫这个struts-tags.tld,具体怎么玩到时拿sh-gs-tskj的代码再看下咯
< s:property type ="json" value ="#dw.content"/>
 
 
 

代码:
 
                                                       String content = StringUtils.defaultIfEmpty(dzhWeiboBO.getContent(), "");
                              content = WebUtil. clearHtmlTag(content, "utf-8");
                               /* 20130113 sv 转json */
                               try {
                                    content = com.linktong.util.string.StringUtils.string2Json(content);
                                    
                                    JSONObject json = new JSONObject();
                                    json.put( "content", content);
//                                  System.out.println( json);
                                    
                                     // 使用JSONWriter将content输出一个可用的JSON String
                                    String valueToString = JSONUtils.valueToString(json.get("content"));
//                                  System.out.println(valueToString);
                                    
                                     // 去除JSONUtils.valueToString返回的前后"符号
                                    valueToString = valueToString.substring(1);
                                    valueToString = valueToString.substring(0, valueToString.length() - 1);
                                    
                                    content = valueToString.replace("\"" , "" );
//                                  System.out.println(content);
                              } catch (Exception e) {
                                     // TODO Auto-generated catch block
                                    e.printStackTrace();
                              }
 
 
代码v2:
 
#action code
                              String content = StringUtils.defaultIfEmpty(dzhWeiboBO.getContent(), "");
//                            content = WebUtil.clearHtmlTag(content, "utf-8");
                               /* 转json    by sv 20130113 */
                               try {
//                                  content = com.linktong.util.string.StringUtils.string2Json(content);
                                    
                                    JSONObject json = new JSONObject();
                                    json.put( "content", content);
//                                  System.out.println( json);
                                    
                                     // 使用JSONWriter将content输出一个可用的JSON String
                                    String valueToString = JSONUtils.valueToString(json.get("content"));
//                                  System.out.println(valueToString);
                                    
                                     // 去除JSONUtils.valueToString返回的前后"符号
                                    valueToString = valueToString.substring(1);
                                    valueToString = valueToString.substring(0, valueToString.length() - 1);
                                    
                                    content = valueToString.replace("\"" , "" );
//                                  System.out.println(content);
                              } catch (Exception e) {
                                     // TODO Auto-generated catch block
                                    e.printStackTrace();
                              }
 
#jsp code
                         <td style='text-align : left' title='< s:property type="json" value="#dw.content"/> '>
                         <s:if test='#dw.content!=null&&#dw.content.getBytes().length>90' >
                               <s:property type="json" value="#dw.content.substring(0,45)" />...
                               </s:if>
                               <s:else>
                                     <s:property type="json" value="#dw.content" />
                               </s:else>
                         </td>
 
 
 

 
 
 
 
 
 
posted @ 2014-11-04 10:39  程序员斯文  阅读(1197)  评论(0编辑  收藏  举报