处理JSON数据中含有双引号??

来源:互联网 发布:淘宝里的表情 编辑:程序博客网 时间:2024/06/06 14:08

{"fssj":"20170717145154","person1":"管理员","person2":"销售经理22","rybm_fsr":1,"rybm_jsr":3,"xtxxbm":125,"xxbt":"ddd","xxnr":"<p><strong>dddd<em>dd</em><

/strong><strong><em><span style="text-decoration: underline;">dadada</span></em></strong><br/></p><p><strong><em><span style="text-decoration: line-through;">ddddd</span></em></strong><strong><em><span style="text-


decoration: underline;">dd<sub>fff</sub></span></em></strong></p>","zt":"0"}


这个语句可以看到 有点像json。但是 在xxnr的value里 有双引号即“”,则这个是一个不合法的json。


所以没有办法将这个语句转化。即在js里没法用JSON.parse()转化。


我先说明一下情况:这个是一个一个值,通过ajax传递到java后台,后台在把这些值保存在数据库里。


在其他函数里,获取这些值,并通过保存在map里,然后用JSON.toJSONString()转化为json 就成为了


上面的样子。 本来想通过js接受后台传递过来的json。并用JSON.parse()转化,可以因为是不合法的


json,所以 失败。


解决方法:
 在js通过ajax传递参数之前,对参数xxnr的value值进行转义将双引号转为/”即xxnr=xxnr.replace


(/"/g,"\\\"");。在js里没有全局替换。所以用/g 正则表达式代替全局。 如.
replace(/\'/g, "\\'")    ->  ' 替换成  \'  
.replace(/\"/g, "\\\"")  ->  " 替换成\"   
注:适用于 onclick='Test("数字双音\"")' 这种写法


.replace(/\"/g, "&quot;")  ->" 替换成 &quot; 
注:适用于onclick="Test('数字双音&quot')"  建议写法


.replace(/</g, "\\\<") ->  < 替换成\<




.replace(/>/g,"\\\>")  ->  > 替换成\>
转义结束后 再传递参数执行上述操作 就可以成功




如果没有转义直接传递了,那么再后台可以自己写一个函数, 把属性值中的双引号改成中文引号就可以


了   
private static String jsonString(String s){
            char[] temp = s.toCharArray();       
            int n = temp.length;
            for(int i =0;i<n;i++){
                if(temp[i]==':'&&temp[i+1]=='"'){
                        for(int j =i+2;j<n;j++){
                            if(temp[j]=='"'){
                                if(temp[j+1]!=',' &&  temp[j+1]!='}'){
                                    temp[j]='”';
                                }else if(temp[j+1]==',' ||  temp[j+1]=='}'){
                                    break ;
                                }
                            }
                        }   
                }
            }       
            return new String(temp);

        }



以上是根据别人的博客和建议做的总结

原创粉丝点击