对于此示例,假设我在表单中有一个月份列表,每个月份旁边都有一个复选框.我正在寻找帮助做两件事情中的任何一件事:
>转换查询字符串(例如“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"}})