【问题标题】:From QueryString to JSON in JavaScriptJavaScript 中从 QueryString 到 JSON
【发布时间】:2016-03-04 05:23:37
【问题描述】:

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

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

我正在关注this,但看起来我错过了什么……如果需要,我也可以使用 jQuery。

【问题讨论】:

  • 教程代码似乎对您不起作用?
  • 看起来它正在返回一个包含对象的数组,但我只需要该对象
  • 你解决过这个问题吗?我的建议对你有帮助吗?
  • @scniro 检查我的答案...
  • @Napolux 你的回答并不能解释很多

标签: javascript jquery query-string


【解决方案1】:

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

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

【讨论】:

  • 你能创建一个显示这个工作的小提琴吗?我不明白你在这里做什么 - 你是如何解析查询字符串的?
【解决方案2】:

由于您没有提供您的 sn-p,因此不确定您在上述教程中遇到的问题,但是查看该文章,我能够为您制作一个完整的工作示例(在厘米)。请注意以下...

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 作为解决此问题的方法。这很棒,而且可能更健壮一些,但你应该能够先摆脱上面的代码,特别是如果你想要一个普通的解决方案(你总是应该这样做!!)

【讨论】:

  • 您可以将最后一行修改为 return (JSON.stringify(result)); 这将提供完美的 JSON 字符串。现在它返回的对象不会在 console.log() 中打印。
【解决方案3】:

可以单行写。

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

可运行的 sn-p:

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

【讨论】:

  • 这里最好的解决方案,不知道为什么它没有得到更多的支持?
【解决方案4】:

你可以关注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' );
    }
  });

});

【讨论】:

    【解决方案5】:

    你可以这样做。

    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)将key作为arr[0],value作为arr[1],如果没有值则''。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 2012-08-05
      • 2023-03-12
      • 2014-05-07
      • 2010-12-08
      相关资源
      最近更新 更多