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>

 

浏览器验证结果

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM