利用js解析php的表单数据

简介: 利用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))
目录
相关文章
|
7月前
|
JSON 数据处理 PHP
PHP数组处理技巧:高效操作数据集合
PHP数组处理技巧:高效操作数据集合
|
7月前
|
JSON 安全 大数据
PHP中的数组处理艺术:灵活高效的数据操作
PHP中的数组处理艺术:灵活高效的数据操作
|
7月前
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
249 67
|
8月前
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1310 58
|
10月前
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
|
10月前
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
本文分析了YashanDB中PHP通过ODBC查询数据时出现的数据截断问题,表现为超过256字节的数据被截断,以及isql工具无法显示超过300字节长度的数据。问题根源在于YashanDB的ODBC驱动仅支持单次查询,且PHP扩展库默认缓冲区限制。解决方案包括改用PHP ODBC扩展库而非PDO_ODBC,以及调整isql代码逻辑以支持循环取数或一次性读取完整数据。文章还提供了具体代码示例和规避方法,适用于23.2.4.14及更早版本。
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
|
10月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
187 7
|
10月前
|
消息中间件 JavaScript 前端开发
最细最有条理解析:事件循环(消息循环)是什么?为什么JS需要异步
度一教育的袁进老师谈到他的理解:单线程是异步产生的原因,事件循环是异步的实现方式。 本质是因为渲染进程因为计算机图形学的限制,只能是单线程。所以需要“异步”这个技术思想来解决页面阻塞的问题,而“事件循环”是实现“异步”这个技术思想的最主要的技术手段。 但事件循环并不是全部的技术手段,比如Promise,虽然受事件循环管理,但是如果没有事件循环,单一Promise依然能实现异步不是吗? 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您
|
10月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS