代码拉取完成,页面将自动刷新
/***
* @Author zjy
*
* 这份代码排除了两种情况,
1. 即这样定义数组的: [[[1,2,3]]],也就是说后台不支持List<List<List<...>>>这一类的封装,而且说实话吧,如果开发时候真要传这种数据类型,那可想而知前台代码是有多乱了,这就意味着完全有更好的数据结构代替它
2. 是这种的: [100,{"money":200},[300]],即一个List集合里可以装多种类型对象,如果真的有这种需求,我觉得完全可以避免这么传
*
*
**/
//let v = {"arr": [1,2,3,4]};
//arr[]=1&arr[]=2&arr[]=3&arr[]=4
//let v = {passengers:[{"name":"Egor", "role":"pilot"},{"name":"DHH", "role":"2pilot"}]};
//passengers[0][name]=Egor&passengers[0][role]=pilot&passengers[1][name]=DHH&passengers[1][role]=2pilot
//定义字符栈
var stack_chars = [];
//定义[]括号栈
var stack_parentheses = [];
//定义这个下标变量是为了解决 {arr:[1,2,3]} ——> arr[]=1&arr[]=2&arr[]=3 这种情况
//因为 arr[]=1&arr[]=2&arr[]=3 应该变成 arr[0]=1&arr[1]=2&arr[2]=3,所以定义了stackIdx是为了完成括号里下标的递增
var stackIdx = -1;
//判断当前读取的字符是否在[]中
function inParentheses() {
return stack_parentheses.length == 1;
}
//通过调用该方法完成将复杂对象obj转换成springmvc支持嵌套绑定的QueryString
function serialize(obj) {
let jqueryStr = decodeURIComponent(jQuery.param(obj));
let serializeStr = "";
for (let index = 0; index < jqueryStr.length; index++) {
const c = jqueryStr[index];
if (c === "[" || c === "]") {
//入括号栈
stack_parentheses.push(c);
//检查是否栈满, 并进行相关操作
serializeStr += checkCharsStack();
} else {
if (inParentheses()) {
stack_chars.push(c);
} else {
//不在[]中的字符直接拼接到结果串中
serializeStr += c;
}
}
}
return serializeStr;
}
function checkCharsStack() {
//栈满
if (stack_parentheses.length >= 2) {
let c;
let str = "";
let arr = [];
while ((c = stack_chars.pop()) !== undefined) {
//这里把pop出的内容又push进arr是为了防止字符顺序颠倒
arr.push(c);
}
while ((c = arr.pop()) !== undefined) {
str += c;
}
//[]出桟
stack_parentheses.pop();
stack_parentheses.pop();
//如果符号栈为空只能说明JQuery序列化了没有key的数组,即序列化了这种 {arr:[1,2,3]} ——> arr[]=1&arr[]=2&arr[]=3
if(str === ""){
return "["+(++stackIdx)+"]";
}else{
stackIdx = -1;
}
//如果是其他字符,比如arr[1][name]应该转化成arr[1].name
if (isNaN(parseInt(str))) {
return "." + str;
} else {
//如果是数字,比如arr[1],转化后仍是arr[1], 即不需要动他
return "[" + str + "]";
}
}
return "";
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。