从 QueryString 到 JavaScript 中的 JSON

From QueryString to JSON in JavaScript

本文关键字:中的 JSON JavaScript QueryString      更新时间:2023-09-26

如何将像var1=5&var2=stackoverflow&var3=blah这样的QueryString转换为像这样的JSON对象:

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

正在关注这个,但看起来我错过了一些东西......如果需要,我也可以使用jQuery。

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

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);
};

由于您没有提供代码片段,因此不确定您在上述教程中的哪一点上挣扎,但是查看该文章,我能够为您制作一个完全工作的示例(评论中有一些改进建议)。观察以下内容...

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=stackoverflow&var3=blah';
var obj = QueryStringToJSON(string);
console.log(obj) // {var1: "5", var2: "stackoverflow", var3: "blah"}

JSFiddle Link - 工作演示


在网上搜索会指向jQuery BBQ:$.deparam在某些时候作为一种方法。这很棒,而且可能更健壮一些,但您应该能够首先摆脱上面的代码,特别是如果您想要一个普通的解决方案(您总是应该这样做!!

它可以用一行写。

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

可运行代码段:

const paramsString = "var1=5&var2=stackoverflow&var3=blah";
const searchParams = new URLSearchParams(paramsString);
// Iterate the search parameters.
for (let p of searchParams) {
  console.log(p);
}
console.log(Object.fromEntries(searchParams));

你可以按照这个操作:

$(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' );
    }
  });
});
你可以

这样做。

var query="var1=5&var2=stackoverflow&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() 函数对其进行解码。