如何使用jQuery将查询字符串或JSON对象映射转换为单个JSON对象?

对于此示例,假设我在表单中有一个月份列表,每个月份旁边都有一个复选框.我正在寻找帮助做两件事情中的任何一件事:

>转换查询字符串(例如“January = on& March = on& September = on”)或
>转换对象地图:[{January:’on’},{March:’on’},{September:’on’}]

单个JSON对象:{January:’on’,March:’on’,9月:’on’}

我意识到第一个映射已经是JSON,但是我希望它不是对象数组,而是一个JSON对象.我可以使用$(‘form’)构建地图.serializeArray();我可以用$(‘form’)构建查询字符串.serialize();.

jQuery API中.serialize()的实现很简单:

serialize: function() {
    return jQuery.param(this.serializeArray());
},

这就是我可以处理第一个或第二个答案的原因.

我想这样做的原因是因为我从PrototypeJS切换到jQuery,而在PrototypeJS中,这很简单:

Object.toJSON(Form.serializeElements($('myform'), true));

那么,有没有人知道一个JSON插件(我想坚持只有jQuery)可以轻松地做到这一点,或者知道一个简单的方法来实现我正在寻找的结果?谢谢!

最佳答案
你可以试试这个

String.prototype.QueryStringToJSON = function () {
href = this;
qStr = href.replace(/(.*?\?)/, '');
qArr = qStr.split('&');
stack = {};
for (var i in qArr) {
    var a = qArr[i].split('=');
    var name = a[0],
        value = isNaN(a[1]) ? a[1] : parseFloat(a[1]);
    if (name.match(/(.*?)\[(.*?)]/)) {
        name = RegExp.$1;
        name2 = RegExp.$2;
        //alert(RegExp.$2)
        if (name2) {
            if (!(name in stack)) {
                stack[name] = {};
            }
            stack[name][name2] = value;
        } else {
            if (!(name in stack)) {
                stack[name] = [];
            }
            stack[name].push(value);
        }
    } else {
        stack[name] = value;
    }
}
return stack;
}

请求参数

    href="j.html?name=nayan&age=29&salary=20000&interest[]=php&interest[]=jquery&interest[1]=python&interest[2]=Csharp&fan[friend]=rangan&fan[family]=sujan&sports[1]=cricket&sports[2]=football";

用法

alert(href.QueryStringToJSON().toSource())

产量

({name:"nayan", age:29, salary:20000, interest:["php", "python", "Csharp"], fan:{friend:"rangan", family:"sujan"}, sports:{1:"cricket", 2:"football"}})

转载注明原文:如何使用jQuery将查询字符串或JSON对象映射转换为单个JSON对象? - 代码日志