zoukankan      html  css  js  c++  java
  • JSON对象转成form

    当contentType: 'application/x-www-form-urlencoded'方式提交时,提交的数据中为复杂的json,在签名验证时,会很麻烦,在网上搜索都没有找到合适的代码,都是只支持第一层转化,并且都是复制的,就写了一个不限层的转换方法给需要的朋友参考一下,本人并非js开发

    转换方法

                    /**
                     * JSON对象转为Form提交数据
                     * @param data Json数据
                     * @param key key
                     * @param type 1.数组或对象,-1.值
                     */
                    var JsonToFormParmas = function (data, key = '', type = -1) {
                        var params = [];
                        for (var key1 in data) {
                            var val1 = data[key1];
                            if (Array.isArray(val1) == true) {
                                for (var key2 in val1) {
                                    var val2 = val1[key2];
                                    if (Array.isArray(val2) == true) {
                                        if (type == 1)
                                            params = params.concat(JsonToFormParmas(val2, `${key}[${key1}][${key2}]`, 1));
                                        else
                                            params = params.concat(JsonToFormParmas(val2, `${key}${key1}[${key2}]`, 1));
                                    }
                                    else if (typeof val2 === 'object') {
                                        if (type == 1)
                                            params = params.concat(JsonToFormParmas(val2, `${key}[${key1}][${key2}]`, 1));
                                        else
                                            params = params.concat(JsonToFormParmas(val2, `${key}${key1}[${key2}]`, 1));
                                    }
                                    else {
                                        if (type == 1) {
                                            params.push({ key: `${key}[${key1}][]`, val: val1[key2] });
                                        }
                                        else {
                                            params.push({ key: `${key}${key1}[]`, val: val1[key2] });
                                        }
                                    }
                                }
                            }
                            else if (typeof val1 === 'object') {
                                if (type == 1)
                                    params = params.concat(JsonToFormParmas(val1, `${key}[${key1}]`, 1));
                                else
                                    params = params.concat(JsonToFormParmas(val1, `${key}${key1}`, 1));
                            }
                            else {
                                if (type == 1) {
                                    params.push({ key: key + `[${key1}]`, val: val1 });
                                }
                                else {
                                    params.push({ key: key1, val: val1 });
                                }
                            }
                        }
                        return params;
                    }

    测试代码如下

                    var data = {
                        name: 'name0',
                        isb: true,
                        list1: [1, 2],
                        list2: [
                            {
                                name: 'name1',
                                value: 'value1'
                            },
                            {
                                name: 'name2',
                                value: 'value2'
                            }],
                        data1: {
                            name: 'name3',
                            list3: [1, 2],
                            list4: [{
                                name: 'name1',
                                value: 'value1'
                            }],
                            data2: {
                                name: 'name4'
                            }
                        }
                    };var params = JsonToFormParmas(data);

    测试结果

     1 [
     2     {
     3         "key": "name",
     4         "val": "name0"
     5     },
     6     {
     7         "key": "isb",
     8         "val": true
     9     },
    10     {
    11         "key": "list1[]",
    12         "val": 1
    13     },
    14     {
    15         "key": "list1[]",
    16         "val": 2
    17     },
    18     {
    19         "key": "list2[0][name]",
    20         "val": "name1"
    21     },
    22     {
    23         "key": "list2[0][value]",
    24         "val": "value1"
    25     },
    26     {
    27         "key": "list2[1][name]",
    28         "val": "name2"
    29     },
    30     {
    31         "key": "list2[1][value]",
    32         "val": "value2"
    33     },
    34     {
    35         "key": "data1[name]",
    36         "val": "name3"
    37     },
    38     {
    39         "key": "data1[list3][]",
    40         "val": 1
    41     },
    42     {
    43         "key": "data1[list3][]",
    44         "val": 2
    45     },
    46     {
    47         "key": "data1[list4][0][name]",
    48         "val": "name1"
    49     },
    50     {
    51         "key": "data1[list4][0][value]",
    52         "val": "value1"
    53     },
    54     {
    55         "key": "data1[data2][name]",
    56         "val": "name4"
    57     }
    58 ]


    新建一个index.html页面测试

    <script>
        var data = {
            name: 'name',
            isb: true,
            list: [,],
            list: [
                {
                    name: 'name',
                    value: 'value'
                },
                {
                    name: 'name',
                    value: 'value'
                }],
            data: {
                name: 'name',
                list: [,],
                list: [{
                    name: 'name',
                    value: 'value'
                }],
                data: {
                    name: 'name'
                }
            }
        };
        layui.$.ajax({
            url: 'https://www.baidu.com',
            data: data,
            async: false,
            contentType: 'application/x-www-form-urlencoded'
        })
    </script>

    浏览器验证结果

  • 相关阅读:
    我劝你不要记账
    富人不存钱
    1w+的心路历程
    简历这么写才对!
    Android 开发凉了吗!
    三个思维转变
    说一说赚钱
    【原】Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(Matt Galloway著)读书笔记(二)
    【原】Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(Matt Galloway著)读书笔记(一)
    【原】iOS开发进阶(唐巧)读书笔记(二)
  • 原文地址:https://www.cnblogs.com/zhouliuyi/p/15020612.html
Copyright © 2011-2022 走看看