json数据中嵌套 ”(双引号) 导致格式报错的问题,处理方式
Posted 星际毁灭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json数据中嵌套 ”(双引号) 导致格式报错的问题,处理方式相关的知识,希望对你有一定的参考价值。
先看数据格式:
可以看到,在value中有双引号。主要对应的key是position 和interests两个部分。
发现position 是单个字符串格式。 interests是对应的json数组的格式。所以分两步解决。
1.解决position对应的问题。
String str=""; str中是有问题的json数据
String newstr=""; String flag1="\\"position\\":\\""; //标记1: "position":" 引号也要留着 String flag2="\\",\\"interests\\":"; //下一个标签的开头作为标记 ","interests": int start=str.indexOf(flag1); //起始位置 int end=str.indexOf(flag2); //结束位置 while(start>0) { String conent=str.substring(start+flag1.length(),end); //将内容切割出来,第一个参数加上flag1的长度是为了找到开始。
conent=conent.replace("\\"", "\'"); //替换双引号为 ’ ,也可替换为其他字符。
newstr=newstr+str.substring(0,start)+flag1+conent+flag2; //将content之前的+conten+content后边的 str=str.substring(end+flag2.length(),str.length()); //将改好的部分从str中分出去 start=str.indexOf(flag1); //重新确定开始和结束 end=str.indexOf(flag2); } newstr=newstr+str; //加上最后的结尾,,newstr就是正确的数据
这就是解决过程,根据 position 的前后内容,把每个value切割出来,替换 " 之后在连接。这个问题解决了。
2.第二步就是解决intersts中的问题,因为这个是json数组形式,其中的数据格式为 " value1","value2","value3"
所以,这个中要用 ", 一起来确定位置。
按照1中过程分解出content就是 下边例子中 [ ] 的内容。
public static String interst(String s) { //该方法传入的参数为content内容,下边的方法需要调用 char[] temp = s.toCharArray(); //将内容转化为数组形式。 int n = temp.length-1; //结尾肯定是 ” 所以需要分割出去 int start=1; //找到起始位置,没错替换之后还要重新确定起始。起始就是每个双引号的后边 for(int i=0;i<n-1;i++) { if(temp[i] == \'"\' && temp[i + 1] == \',\') { for(int j=start;j<i;j++) { //替换内容 if(temp[j]==\'"\') { temp[j]=\'\\\'\'; } } start=i+3; } } for(int j=start;j<n;j++) { if(temp[j]==\'\\"\') { temp[j]=\'\\\'\'; } } // System.out.println(temp); return new String (temp); }
public static String upexperts(String str) { //str为json有 ” 的json数据 ,
newstr="";
flag1="\\"interests\\":["; //标记1:
flag2="]}"; //标记2
start=str.indexOf(flag1);
end=str.indexOf(flag2);
while(start>0) {
String conent=str.substring(start+flag1.length(),end);
conent=interst(conent); //调用上边的方法,将content内容处理,去掉 "
newstr=newstr+str.substring(0,start)+flag1+conent+flag2;
str=str.substring(end+flag2.length(),str.length());
start=str.indexOf(flag1);
end=str.indexOf(flag2);
}
newstr=newstr+str;
}
以上是关于json数据中嵌套 ”(双引号) 导致格式报错的问题,处理方式的主要内容,如果未能解决你的问题,请参考以下文章