java json字符串傳遞給 js 時 特殊字符轉義錯誤 研究


一些換行 回車等符號需要轉義

主要注意 單引號 與雙引號。

一 如果js以 雙引號接收字符串 則轉單引號 "  至 \" 否則js報錯

二 如果js以 單引號接收字符串 則轉單引號 '   至 \' 否則js報錯

不管哪種情況 字符串中原有\ 需替換 成 \\

{"Aaa":0,"bbb":1,"ddd":"a哦我\"我'我'哇"}    

    ====》 

{\"Aaa\":0,\"bbb\":1,\"ddd\":\"a哦我\\\"我'我'哇\"}  雙引號接收

{"Aaa":0,"bbb":1,"ddd":"a哦我\\"我\'我\'哇"}  單引號接收

 

package CN80s.MicroCampus;


import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class Daaa {
private static SerializerFeature[] features = {
// SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.DisableCheckSpecialChar,
SerializerFeature.QuoteFieldNames,
SerializerFeature.WriteEnumUsingName,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteMapNullValue
};
/**
* @param args
*/
public static void main(String[] args) {

// TODO Auto-generated method stub
AAA aa=new AAA();aa.ddd="a哦我\"我'我'哇";
String dc=aa.ddd;
aa.setDdd(dc);
System.out.println(aa.ddd);
String ss=JSON.toJSONString(aa);//,SerializerFeature.WriteNullNumberAsZero
//String sss=JSON.toJSONString(aa, true);
String s1=JSONObject.toJSONString(aa,features);

System.out.println(ss);
System.out.println(s1);
System.out.println("=="+stringToJson(ss,true));




Map < String , Object > jsonMap = new HashMap< String , Object>();
jsonMap.put("a",1);
jsonMap.put("b","");
jsonMap.put("c",null);
jsonMap.put("d","wuzhuti.cn");

String str = JSONObject.toJSONString(jsonMap,features);

System.out.println(str);

net.sf.json.JSONObject ddd=new net.sf.json.JSONObject();
ddd.put("dddd","的撒旦法撒旦法撒'\"旦法'撒旦法");
System.out.println(ddd.toString().replaceAll("'","\\\\'"));
System.out.println("=="+stringToJson(ddd.toString(),true));
}
/**
* java 字符串 轉義特殊字符 to js
* @param s
* @param isJSjson 是否給js使用 true 則會轉義單引號 \'
* @return
*/
public static String stringToJson(String s,boolean isJSjson){
StringBuffer sb = new StringBuffer();
for(int i=0; i<s.length(); i++){
char c =s.charAt(i);
switch(c){
case'\'': if(isJSjson) {sb.append("\\\'");}else{sb.append("\'");} break;
case'\"': if(!isJSjson) {sb.append("\\\"");}else{sb.append("\"");} break;
case'\\':sb.append("\\\\"); break; //如果不處理單引號,可以釋放此段代碼,若結合StringDanYinToJSON()處理單引號就必須注釋掉該段代碼
case'/': sb.append("\\/");break;
case'\b':sb.append("\\b");break;//退格
case'\f':sb.append("\\f");break;//走紙換頁
case'\n':sb.append("\\n");break;//換行
case'\r':sb.append("\\r");break;//回車
case'\t':sb.append("\\t");break;//橫向跳格
default: sb.append(c);
}}
return sb.toString();
}

/**處理文本中的單引號 和 斜杠*/
public static String StringDanYinToJSON(String ors) {
ors= ors == null ? "" : ors;
StringBuffer buffer = new StringBuffer(ors);
int i = 0;
while(i < buffer.length()) {
if(buffer.charAt(i) == '\'' || buffer.charAt(i) == '\\') {
buffer.insert(i,'\\');
i+= 2;
}else {
i++;
}
}
return buffer.toString();
}
}

 

輸出結果

a哦我"我'我'哇
{"Aaa":0,"bbb":1,"ddd":"a哦我\"我'我'哇"}
{"Aaa":0,"bbb":1,"ccc":"","ddd":"a哦我"我'我'哇"}
=={"Aaa":0,"bbb":1,"ddd":"a哦我\\"我\'我\'哇"}
{"d":"wuzhuti.cn","b":"","c":null,"a":1}
{"dddd":"的撒旦法撒旦法撒\'\"旦法\'撒旦法"}
=={"dddd":"的撒旦法撒旦法撒\'\\"旦法\'撒旦法"}

 


免責聲明!

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



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