乱码字符引起的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>


时间: 2024-10-31 04:19:17

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

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

今天做项目中将一个json 字符串转换为对象,但结果怎么都转换不了!——————最后发现问题,原来是因为这个类我给他添加了带参数的构造器!导致转换失败! 在添加一个无参的构造器就好了! 第二个:今天调试代码时发现spring注入总是失效!--------最后发现原来是因为我们new 一个新的线程,在新线程里面跑的!导致Spring  注入失败! 解决办法:http://blog.csdn.net/wuzongpo/article/details/7191467(就是重新创建一个Spring容器)

C# JSON转换以及编码转换

C# JSON转换以及编码转换 一.C# Json转换 首先需要下载安装Newtonsoft.Json.dll,下载地址 引用后再添加:using Newtonsoft.Json;using Newtonsoft.Json.Converters;即可使用. String转JSON String json=JsonConvert.SerializeObject(str); JSON转String String str=JsonConvert.DeserializeObject<String>(j

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

最近在程序中使用json_decode($data,true);转换失败, 并且使用 json_last_error();方法返回最后一次转换的错误,json_last_error();返回int(4) 对于json_last_error();返回的数据为下图中的意思 ,我这边返回的为int(4)则代表语法错误,但将$data数据打印出来后发现前面多了一个<feff>其它复制下来放入json在线转换网站都是成功的. 然后猜测数据是没有问题,问题可能出在<feff>上,百度<f

postman设置环境变量,字段值经过json转换后数值超过类型上限的解决方法

在使用Tests进行环境变量的设置时,遇到这么一种情况,在返回的responseBody中的userId字段,字段返回的是数值类型,再经过json转换之后,发现保存的值跟接口返回的值不一致:如下图: 接口返回的值:"userId":337292419039105024 实际保存的值:"userId":337292419039105000 经过排查后发现,有可能是在json转换的时候,字段值超过了转换的数值类型的上限,导致保存错误: 解决办法: 通过转译的方式去实现,

4、字符、数字之间转换

一.(int).int.Parse.int.tryParse.Convert.ToInt32的区别? Convert.ToInt32 与 int.Parse 较为类似,实际上 Convert.ToInt32 内部调用了 int.Parse: Convert.ToInt32 参数为 null 时,返回 0: int.Parse 参数为 null 时,抛出异常. Convert.ToInt32 参数为 "" 时,抛出异常: int.Parse 参数为 "" 时,抛出异常

Jackson2 json 转换Bean, Bean 里没有对应的值 jackson Un的解决方式

遇到这个问题时我找到了 SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable 这篇文章里说: @JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要.这个注解还可以指定要忽略的字段.使用方法如下: @JsonIgnoreProperties({ "internalId", "secretKe

Python常见字符编码间的转换

学习Python,字符编码间的转换是绕不过去的一只拦路虎,不把编码彻底搞明白,总有一天它会猝不及防坑你一把. Python2.x和Python3.x在字符编码的设置上也有很大区别(Python3未来将是主流,所以Python3为主),今天我们就来一起学习下. 上一篇文章里我已经简述了Python的常见编码了,这里就不再赘述了,还不清楚的小伙伴可以先去看下:     http://www.cnblogs.com/schut/p/8406897.html 一.Unicode 和 UTF-8的纠葛 U

[go]结构体和json转换

细说Golang的JSON解析 golang JSON技巧 Go - 如何解析 JSON 数据?mapstruct包 读写结构体 //写[obj,] type user struct { Name string `json:"name"` Age int `json:"age"` } m:= []user{ {"m1",1}, {"m2",2}, } f, _ := os.Create("./data.txt&quo

atitit.XML类库选型及object 对象bean 跟json转换方案

atitit.XML类库选型及object 对象bean 跟json转换方案 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的 1 2. 常见的xml方面的方法 2 2.1. xml解析 2 2.2. bean与xml互相转换 2 2.3. json与xml的互相转换 2 3. 大名鼎鼎的 DOM  绿色环保的 SAX 默默无闻的 Digester 2 3.1. 默默无闻的 Digester:XML 的 JavaBean 化 2 4. Digester 解析 XML 3