{"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, """) ->" 替换成 "
注:适用于οnclick="Test('数字双音"')" 建议写法
.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);
}
以上是根据别人的博客和建议做的总结