2016-03-04 43 views
0

我如何可以改变一个查询字符串像var1=5&var2=stackoverflow&var3=blah以JSON对象像从查询字符串,以JSON在JavaScript

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

我下面this,但看起来像我错过了一些东西......我也可以使用jQuery,如果需要的话。

+0

似乎究竟是如何将教程代码不适合你的工作? – IceFire

+0

看起来像它的返回一个数组里面的对象,但我只需要 – Napolux

+0

你有没有解决这个问题的对象?我的建议能够帮助你吗? – scniro

回答

3

我做一个手动解决解析对象本身...

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

你可以创建一个小提琴来演示这个工作吗?我不明白你在做什么 - 你如何解析查询字符串? – scniro

0

您可以按照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'); 
    } 
    }); 

}); 
2

不知道在这一点上,你与中提到的教程中挣扎,因为你没有提供你的片段,但检查文章的时候,我能够充分手艺为你工作的例子(在评论中有一些改进建议)。遵守以下...

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如在某一点的方法来此上搜索周围。这是伟大的,可能有点更强大的,但你应该能够逃脱上面的代码中第一个,特别是如果你想要一个香草的解决方案(你总是应该!)

+0

你可以修改最后一行为'return(JSON.stringify(result));'这会给出完美的JSON字符串。现在它返回一个Object将不会在console.log()中打印。 – Amrit

0

你可以这样做。

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)取密钥作为改编[0]和值作为改编[1],如果没有值,则“”。

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