假如你有一段json字串是这样的。
{
"url": "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd=json&rsv_spt=1&oq=timebell&rsv_pq=9eb74c860000febd&rsv_t=9a4fMaQSgnD3kSNW0W8qKe4UqdLktZJC9AzJCdV1WJ4%2BoJq682zgd%2FYcu%2BJYndnDmUgq&rsv_enter=1&rsv_sug3=5&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&inputT=1262&rsv_sug4=1263&rsv_sug=2"
}
那么你传输到后台或者到jsp页面的时候,你就会发现这简直是坑爹。
因为传输的过程中,&符号会导致json被拦腰截断。就是说你后台或前台能接受到的数据就是这样的
{
"url": "https://www.baidu.com/s?ie=utf-8
然后上网查阅后,发现博主果然还是小菜鸟一只。因为这种情况网上早有解决方案了。没错,就是进行url编码就可以了。
只要我们前端js用encodeURIComponent对url地址进行编码就可以了。
我们写一个方法:
function myencodeURI(str){
return encodeURIComponent(encodeURIComponent(str));
}
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd=json&rsv_spt=1&oq=timebell&rsv_pq=9eb74c860000febd&rsv_t=9a4fMaQSgnD3kSNW0W8qKe4UqdLktZJC9AzJCdV1WJ4%2BoJq682zgd%2FYcu%2BJYndnDmUgq&rsv_enter=1&rsv_sug3=5&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&inputT=1262&rsv_sug4=1263&rsv_sug=2
然后你会发现里面的特殊符号都变成了%+两个16进制的玩意。
接下来分两种情况:
1.你是把这json从jsp传输到另一个jsp页面。
接受到这json串的页面,你在解析为json对象之前,要先用decodeURIComponent(str)来进行解码,然后这json串又变成了我们原先的json串了。然后我们就可以调用JSON.parse(str).来进行解析成json对象。
2.你是把这json 串发送到后台。
我java后台是这样接受的
JSONObject obj = new JSONObject().fromObject(data);//将json字符串转换为json对象
WBQEncode_Decoder.my_decode_v2(obj);//用这个工具类的方法来解码
Testdto = (Testdto )JSONObject.toBean(obj, Testdto .class, classMap);//将建json对象转换为Testdto 对象
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
//反解码 处理URL特殊字符的工具类
public class WBQEncode_Decoder {
public static void my_decode_v2(Object object) throws Exception {
if (object instanceof JSONObject) {// 是对象
JSONObject jsonObject = (JSONObject) object;
handleJsonObject(jsonObject);
} else if (object instanceof JSONArray) {// 是对象
JSONArray jsonArray = (JSONArray) object;
int length = jsonArray.size();
for (int i = 0; i < length; i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
handleJsonObject(jsonObject);
jsonArray.set(i, jsonObject);
}
}
}
public static void my_encode_v2(List