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;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM