这种问题有两个解决办法,使用后不管你是什么特殊字符还是什么西欧字体还是什么稀奇古怪的内容都可以完美解决!
 
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>
 
 
 

 
 
 
 
 
 

乱码字符引起的JSON转换失败的更多相关文章

  1. ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)

    本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...

  2. jQuery.ajax() datatype:“json" 转换失败

    当使用jQuery.ajax() 时,如果设置dataType:"json",如果返回的字符转换出错则不会调用success方法,而进入error方法,控制台中也不会出现错误信息 ...

  3. json转换对象中出现null属性的解决方法

    前言:当数据进行json转换时,当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取.原则上来讲服务器端发送的json字符串不允许存在属性值为空的情况,但是如果服务器端发送了nul ...

  4. 1.JSON 转换对象失败问题 2.spring注入失效

    今天做项目中将一个json 字符串转换为对象,但结果怎么都转换不了!——————最后发现问题,原来是因为这个类我给他添加了带参数的构造器!导致转换失败! 在添加一个无参的构造器就好了! 第二个:今天调 ...

  5. Springboot中redisTemplate乱码或json转换问题

    问题1 用RedisTemplate存入map值的时候,用rdm可视化打开,看到的是转码之后的数据,如图: 存入的方法为: public boolean hmset(String key, Map&l ...

  6. json数据转换失败json_last_error int(4)

    最近在程序中使用json_decode($data,true);转换失败, 并且使用 json_last_error();方法返回最后一次转换的错误,json_last_error();返回int(4 ...

  7. Jackson框架,json转换

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...

  8. json转换(c#后台生成json的方法)

    此文转自:http://bbs.csdn.net/topics/380200497,为了方便自己记忆才以文章形式保存. using System; using System.Collections.G ...

  9. Python常见字符编码间的转换

    主要内容:     1.Unicode 和 UTF-8的爱恨纠葛     2.字符在硬盘上的存储     3.编码的转换     4.验证编码是否转换正确     5.Python bytes类型 前 ...

随机推荐

  1. Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心

    B. School Marks Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/probl ...

  2. ubuntu 关闭n卡

      ubuntu对n卡支持不好,电脑耗电和发汤,把它关闭掉   #sudo add-apt-repository ppa:bumblebee/stable#sudo apt-get update#su ...

  3. Unity3D架构设计NavMesh寻路(未完待续)

    国庆闲来没事把NavMesh巩固一下.以Unity3D引擎为例写一个底层c# NavMesh寻路.由于Unity3D中本身自带的NavMesh寻路不能非常好的融入到游戏项目其中,所以重写一个NavMe ...

  4. 关于GCC Cygwin MinGW MSYS

    [转载]关于Gcc/MinGW/Cygwin/Msys http://blog.sciencenet.cn/blog-778757-616920.html 一.GCC的历史 GCC是一个原本用于Uni ...

  5. ELM327 OBD to RS232 Interpreters

    http://elmelectronics.com/DSheets/ELM327DS.pdf

  6. JavaScript在IE6下超级链接window.location.href不跳转的bug 及 解决方案

    今天遇到个很诡异的问题,就是<a href="javascript:void(0);" onclick="window.location.href=url" ...

  7. Linux/UNIX线程(2)

    线程(2) 线程同步 当多个控制线程共享同样内存时,须要确保每一个线程看到一致的数据视图.假设每一个线程使用的变量都是其它线程不会读取或改动的,那么就不在一致性问题. 当两个或多个线程试图在同一时间改 ...

  8. 虚拟机网络配置详解(NAT、桥接、Hostonly) z

    http://www.cnblogs.com/beginmind/p/6379881.html VirtualBox中有四种网络连接方式: NAT Bridged Adapter Internal H ...

  9. SQL中关于where后面不能放聚合函数(如sum等)的解决办法

    我们在编写较为复杂的SQL语句的时候,常常会遇到需要将sum()放到where后面作为条件查询,事实证明这样是无法执行的,执行会报[此处不允许使用分组函数]异常. 那么如何解决呢,使用HAVING关键 ...

  10. Python mongoHelper模块

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Defines a MongoOperator class and allows you to m ...