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