先看數據格式:
可以看到,在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;
}