从 QueryString 到 JSON in JavaScript

From QueryString to JSON in JavaScript

如何将 var1=5&var2=Whosebug&var3=blah 之类的 QueryString 转换为 JSON 对象,例如:

{
    "var1": "5",
    "var2": "Whosebug",
    "var3": "blah"
}

我正在关注 this,但我似乎遗漏了一些东西...如果需要,我也可以使用 jQuery。

你可以关注this:

$(function(){

  // Values are not coerced.
  var params = $.deparam.querystring();

  debug.log( 'not coerced', params );
  $('#deparam_string').text( JSON.stringify( params, null, 2 ) );

  // Values are coerced.
  params = $.deparam.querystring( true );

  debug.log( 'coerced', params );
  $('#deparam_coerced').text( JSON.stringify( params, null, 2 ) );

  // Highlight the current sample query string link
  var qs = $.param.querystring();

  $('li a').each(function(){
    if ( $(this).attr( 'href' ) === '?' + qs ) {
      $(this).addClass( 'current' );
    }
  });

});

不确定您在提到的教程中遇到的问题是什么,因为您没有提供您的代码片段,但是查看该文章后,我能够为您制作一个完整的示例(在注释)。观察以下...

function QueryStringToJSON(str) {
    var pairs = str.split('&');
    var result = {};
    pairs.forEach(function (pair) {
        pair = pair.split('=');
        var name = pair[0]
        var value = pair[1]
        if (name.length)
            if (result[name] !== undefined) {
                if (!result[name].push) {
                    result[name] = [result[name]];
                }
                result[name].push(value || '');
            } else {
                result[name] = value || '';
            }
    });
    return (result);
}

var string = 'var1=5&var2=Whosebug&var3=blah';
var obj = QueryStringToJSON(string);

console.log(obj) // {var1: "5", var2: "Whosebug", var3: "blah"}

JSFiddle Link - 工作演示


在网络上四处搜索会让您找到 jQuery BBQ: $.deparam 作为解决此问题的方法。这很好,而且可能更健壮一些,但是您应该能够首先摆脱上面的代码,特别是如果您想要一个普通的解决方案(您总是应该这样做!!)

我通过手动解析对象本身解决了...

AjaxForm.prototype.getData = function() {
    var data    = this.$element.serializeArray();
    var object  = {};

    for (var i = 0; i < data.length; i++) {
        object[data[i].name] = data[i].value;
    }

    return JSON.stringify(object);
};

你可以这样做。

var query="var1=5&var2=Whosebug&var3=blah";
var arr=query.split("&");
result={};
for(i=0;i<arr.length;i++) {
    k = arr[i].split('=');
    result[k[0]] = (k[1] || '');
}; 
console.log(result);

所以这就是我在做什么 1)使用“&”拆分查询。你会得到数组 ["var1=5",....];

2)再次将数组的每个元素拆分为“=”。

3) 将键作为 arr[0],将值作为 arr[1],如果没有值则 ''。

注意:这是针对已解码的 URI。如果 URI 已编码,请先使用 decodeURIComponent() 函数对其进行解码。

可以一行写

Object.fromEntries(new URLSearchParams('var1=5&var2=Whosebug&var3=blah'))

可运行代码段:

const paramsString = "var1=5&var2=Whosebug&var3=blah";
const searchParams = new URLSearchParams(paramsString);

// Iterate the search parameters.
for (let p of searchParams) {
  console.log(p);
}

console.log(Object.fromEntries(searchParams));