将jQuery序列化URL转换为JSON对象

时间:2019-02-10 07:04:35

标签: jquery json object serialization

也有类似的例子,但它们似乎并未解决这个特定问题。我之前已经使用jQuery序列化了AJAX处理表单。我想使用相同的序列化形式并将其转换为JSON对象。我发现的示例并未解决删除初始序列化中添加的所有特殊字符的问题。因此,我将其发布在此处并进行回答,希望对您有所帮助,并节省我已经花费的时间。或者也许有人有一些更优雅的东西。

因此,我们有一个序列化表格:

Form1 = $('#MyForm').serialize();  // Name=Mr.+John+Mark+Jr.&Email=john%40example.com

如何使用它来实现可行的JSON对象?

1 个答案:

答案 0 :(得分:0)

Form1 = $('#MyForm').serialize();  // Name=Mr.+John+Mark+Jr.&Email=john%40example.com
  Form1 = Form1.replace(/\+/g, '%20'); // Name=Mr.%20John%20Mark%20Jr.&Email=john%40example.com
  var Decoded = decodeURIComponent(Form1); // Name=Mr. John Mark Jr.&Email=john@example.com
  var Values = queryParamsToJson(Decoded); // { Name : "Mr. John Mark Jr.", Email : "john@example.com" }

  function queryParamsToJson(theURL)
  {
     var href = theURL;
     var qStr = href.replace(/(.*?\?)/, '');
     var qArr = qStr.split('&');
     var stack = {};
     for (var i in qArr)
     {
        var a = qArr[i].split('=');
        var name = a[0],
        value = 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;
  }