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

java 专栏收录该内容
18 篇文章 0 订阅

{"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, "\\\"")  ->  " 替换成\"   
注:适用于 οnclick='Test("数字双音\"")' 这种写法


.replace(/\"/g, "&quot;")  ->" 替换成 &quot; 
注:适用于οnclick="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);

        }



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

  • 2
    点赞
  • 2
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值