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;

}

 

posted @ 2020-02-09 17:03  星际毁灭  阅读(10007)  评论(0编辑  收藏  举报