利用js解析php的表单数据

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 利用js解析php的表单数据/** * JsonParse * Created by usher.yue. * User: usher.yue * Date: 17/9/7 * Time: 13:50 * 心怀教育梦-烟台网格软件技术有限公司 */var ...

利用js解析php的表单数据

/**
 * JsonParse
 *  Created by usher.yue.
 * User: usher.yue
 * Date: 17/9/7
 * Time: 13:50
 * 心怀教育梦-烟台网格软件技术有限公司
 */
var obj = {
    'data[][classid][0]': '1000150097620084286',
    'data[][create_time][0]': '1504692288',
    'data[][kcid][0]': '1033150427887550927',
    'data[][schoolid][0]': '1033144479144228284',
    'data[][type][0]': '2',
    'data[][uid][0]': '1034145308280458231',
    'data[][zyid][0]': '1000150235157063544',
    'data[][zytype][0]': 'homework-exercise',

    'data[][classid][1]': '10001500976200842861',
    'data[][create_time][1]': '1504692288',
    'data[][kcid][1]': '1033150427887550927',
    'data[][schoolid][1]': '1033144479144228284',
    'data[][type][1]': '2',
    'data[][uid][1]': '1034145308280458231',
    'data[][zyid][1]': '1000150235157063544',
    'data[][zytype][1]': 'homework-exercise',

    'data[0][classid][2]': '10001500976200842861',
    'data[0][create_time][2]': '1504692288',
    'data[0][kcid][2]': '1033150427887550927',
    'data[0][schoolid][2]': '1033144479144228284',
    'data[0][type][2]': '2',
    'data[0][uid][2]': '1034145308280458231',
    'data[0][zyid][2]': '1000150235157063544',
    'data[0][zytype][2]': 'homework-exercise',

    'data[0][classid][3]': '10001500976200842861',
    'data[0][create_time][3]': '1504692288',
    'data[0][kcid][3]': '1033150427887550927',
    'data[0][schoolid][3]': '1033144479144228284',
    'data[0][type][3]': '2',
    'data[0][uid][3]': '1034145308280458231',
    'data[0][zyid][3]': '1000150235157063544',
    'data[0][zytype][3]': 'homework-exercise'
};


class Xue12JsonConvert {
    /**
     * deep merge
     * @param target
     * @param source
     * @returns {*}
     * @private
     */
    __d(target, source) {
        for (var k in source) {
            if (target[k] && target[k].toString() === "[object Object]") {
                this.__d(target[k], source[k])
            }
            else {
                if (this.__type(target[k]) === "[object Array]") {
                    //去空合并
                    if (this.__type(source[k]) === "[object Array]") {
                        for (let item of source[k]) {
                            item && target[k].push(item);
                        }
                    }else{
                        target[k].push(source[k]);
                    }
                } else {
                    target[k] = source[k];
                }
            }
        }
        return target;
    }

    /**
     * json parser
     * @param obj
     * @param keyList
     * @param deepVal
     * @returns {*}
     * @private
     */
    __parseToJson(obj, keyList, deepVal) {
        let retObj = null;
        if (!keyList) {
            let re = /([_a-zA-Z]\w+|\[\]|\[[0-9]+\]|\[[_a-zA-Z]\w*\])/g;
            let combineArr = [];
            let combineObj={};
            for (var key in obj) {
                retObj = {};
                //解析key
                let matchSubKey = re[Symbol.match](key);
                let indexMatch = /^\[([0-9]+)\]$/.exec(matchSubKey[1]);
                let noneIndexMatch = /^\[\]$/.exec(matchSubKey[1]);
                let objectMatch = /^\[([a-zA-Z_]\w+)\]$/.exec(matchSubKey[1]);
                if (indexMatch) {
                    retObj[matchSubKey[0]] = [];
                } else if (noneIndexMatch) {
                    retObj[matchSubKey[0]] = [];
                } else if (objectMatch) {
                    retObj[matchSubKey[0]] = {};
                }
                //赋值
                retObj[matchSubKey[0]] = this.__parseToJson(null, matchSubKey.slice(1), obj[key]);
                //合并对象
                combineObj=this.__d(combineObj,retObj);
            }
            //解析数据
            return combineObj;
        } else {
            if (keyList.length > 1) {
                let indexMatch = /^\[([0-9]+)\]$/.exec(keyList[0]);
                let noneIndexMatch = /^\[\]$/.exec(keyList[0]);
                let objectMatch = /^\[([a-zA-Z_]\w+)\]$/.exec(keyList[0]);
                if (indexMatch) {
                    retObj = [];
                    retObj[indexMatch[1]] = this.__parseToJson(null, keyList.slice(1), deepVal);
                } else if (noneIndexMatch) {
                    retObj = [];
                    retObj[noneIndexMatch[1]] = [];
                    retObj.push(this.__parseToJson(null, keyList.slice(1), deepVal));
                } else if (objectMatch) {
                    retObj = {};
                    retObj[objectMatch[1]] = {};
                    retObj[objectMatch[1]] = this.__parseToJson(null, keyList.slice(1), deepVal);
                }
            } else if (keyList.length == 1) {
                let indexMatch = /^\[([0-9]+)\]$/.exec(keyList[0]);
                let noneIndexMatch = /^\[\]$/.exec(keyList[0]);
                let objectMatch = /^\[([a-zA-Z_]\w+)\]$/.exec(keyList[0]);
                if (indexMatch) {
                    retObj = [];
                    retObj[indexMatch[1]] = deepVal;
                } else if (noneIndexMatch) {
                    retObj = [];
                    retObj.push(deepVal);
                } else if (objectMatch) {
                    retObj[objectMatch[1]] = deepVal;
                }
            }
        }
        return retObj;
    }

    /**
     * type
     * @param o
     * @returns {*}
     * @private
     */
    __type(o) {
        return Object.prototype.toString.call(o);
    }

    /**
     * 转换
     * @param obj
     * @returns {*}
     */
    parseToJson(obj) {
        return this.__parseToJson(obj);
    }
}


let json = new Xue12JsonConvert();
let r = json.parseToJson(obj);
console.log(JSON.stringify(r))
目录
相关文章
|
3天前
|
存储 JavaScript 前端开发
JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)
【6月更文挑战第25天】JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)。
10 2
|
6天前
|
存储 JavaScript 前端开发
JavaScript中的数组是核心数据结构,用于存储和操作序列数据
【6月更文挑战第22天】JavaScript中的数组是核心数据结构,用于存储和操作序列数据。创建数组可以使用字面量`[]`或`new Array()`。访问元素通过索引,如`myArray[0]`,修改同样如此。常见方法包括:`push()`添加元素至末尾,`pop()`移除末尾元素,`shift()`移除首元素,`unshift()`添加到开头,`join()`连接为字符串,`slice()`提取子数组,`splice()`进行删除、替换,`indexOf()`查找元素位置,`sort()`排序数组。还有其他如`reverse()`、`concat()`等方法。
15 2
|
6天前
|
关系型数据库 MySQL 数据库连接
蓝易云 - PHP基本语法解析与应用指南
以上只是PHP基本语法的简要概述,要深入了解和掌握PHP,你需要阅读更多的教程和参考资料,并通过实践来提高你的技能。
18 2
|
9天前
|
JavaScript 前端开发 算法
【JavaScript】JavaScript 垃圾回收机制深度解析:内存管理的艺术
JavaScript的内存管理和垃圾回收机制涉及栈内存与堆内存、引用计数与标记-清除算法。栈内存存储基本类型和函数调用时的局部变量,而堆内存用于复杂数据类型,如对象和数组。垃圾回收主要通过标记-清除策略,处理不再被引用的对象。现代引擎如V8使用分代收集和增量标记等优化方法,减少停顿并提升性能。开发者应注意避免内存泄漏,如及时解除引用、管理DOM引用和定时器,使用WeakMap和WeakSet等。理解这些原理和最佳实践对于编写高效代码至关重要。
21 5
|
1天前
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
|
2天前
|
存储 JavaScript 前端开发
JavaScript——JavaScript基础:数组 | JavaScript函数:使用、作用域、函数表达式、预解析
在JavaScript中,内嵌函数可以访问定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。①全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用。函数表达式与函数声明的定义方式几乎相同,不同的是函数表达式的定义必须在调用前,而函数声明的方式则不限制声明与调用的顺序。③块级变量:ES 6提供的let关键字声明的变量称为块级变量,仅在“{}”中间有效,如if、for或while语句等。
17 0
|
6天前
|
JavaScript 前端开发 算法
[练习]用Js获取html页面中表单提交的数据并且返回到控制台
[练习]用Js获取html页面中表单提交的数据并且返回到控制台
7 0
|
8天前
|
数据采集 前端开发 JavaScript
Python爬虫技术:动态JavaScript加载音频的解析
Python爬虫技术:动态JavaScript加载音频的解析

推荐镜像

更多