zoukankan      html  css  js  c++  java
  • 把json格式对象转成可提交字符串格式,会过滤掉函数 {a: {b: 3}, b: [1], c: "d"} -> a.b=3&b[0]=1&c=d

    var json = {
           name: "任务名称" ,
           scoreRule: "",
           score: "",           //     如果规则表达式不为空,则默认选中 “按规则表达式计算”
           unique: 1,
           startTime: "2014-09-15 20:20:20",
           endTime: "2014-10-15 20:20:20",
           status: 1,
           isTaks: 0,
           tradeType: 1,
           description: "业务描述" ,
           codes: [ "16", "6" ],  // 选中的平台
           ids: [ "3"],                        // app内部链接
           test: {
                  a: 1,
                  b: [1, 2, 3]
           }
    };
    
    var json2 = {
           a: 1,
           b: 2,
           c: {
                  a: 1,
                  b: {
                         a: 1,
                         b: [1, 2]
                  },
                  c: [1, 2]
           },
           d: [1, 2, {
                  a: 1,
                  b: {
                         a: 1
                  },
                  c: [1, 2]
           }]
    };
    
    /**
     * 把json格式对象转成可提交字符串格式,会过滤掉函数 {a: {b: 3}, b: [1], c: "d"} -> a.b=3&b[0]=1&c=d
     * @param  {Object} data   要转化的json对象
     * @param  {String} prefix 要带的前缀
     * @return {String}        字符串
     */
    function paramData(data, prefix) {
            var _getType = ({}).toString,
                  _paramArray = function(arr, prefix) {
                          var    result = [],
                               j = 0,
                               len = arr.length;
    
                          for (; j < len; j++) {
                                var data = arr[j],
                                       type = _getType.call(data),
                                       subPrefix = prefix + "[" + j + "]";
    
                               result = result.concat(_paramAll(arr[j], prefix + "[" + j + "]"));
                         }
    
                          return result;
                  },
                  _paramAll = function(data, prefix) {
                          var result = [],
                               type = _getType.call(data);
    
                          switch (type) {
                                case "[object Object]" :
                                       var subPrefix = prefix ? prefix + "." : "",
                                                                     i;
    
                                       for (i in data) result = result.concat(_paramAll(data[i], subPrefix + i));
                                       break;
                                case "[object Array]" :
                                      result = result.concat(_paramArray(data, prefix));
                                       break;
                                case "[object String]" :
                                case "[object Number]" :
                                      result.push(prefix + "=" + data);
                         }
    
                          return result;
                  };
    
           prefix = prefix || "";
            // if (prefix) {     // prefix必须以 . 结尾
            //     prefix = /.$/.test(prefix) ? prefix : (prefix + ".");
            // } else {
            //     prefix = "";
            // }
    
            return (function () {
                   return _paramAll(data, prefix);
           }()).join( "&");      
    }
    
    console.log(paramData(json2, "rule"));
    console.log(paramData(json, "rule"));
  • 相关阅读:
    内置对象
    Angular 动画
    Angular_上拉刷新
    angular Observable
    【Nginx】nginx为目录或网站加上密码认证
    MongoDB笔记
    websocket服务器+客户端
    cli 中php的配置和phpinfo不一样
    linux设置时区和自动同步时间
    crontab & php实现多进程思路
  • 原文地址:https://www.cnblogs.com/qiangspecial/p/3990678.html
Copyright © 2011-2022 走看看