Javascript 如何将URI参数转换为JSON

Javascript 如何将URI参数转换为JSON,javascript,jquery,Javascript,Jquery,我有一个params字符串: program_id=11792&percentage=5 我希望将其转换为标准JSON: {"program_id":"117902", "percentage":"5"} 一艘班轮: 更完整的解决方案: 将解析数字: “no=2”=>{no:2}与以前的版本相比{no:2} 将执行URI解码: “问候语=你好%3Dworld”=>{问候语:“你好世界”} 您可以使用此代码,但它不会检查任何错误: var url = "program_id=117

我有一个params字符串:

program_id=11792&percentage=5
我希望将其转换为标准JSON:

{"program_id":"117902", "percentage":"5"}
一艘班轮:
更完整的解决方案:
  • 将解析数字:

    “no=2”
    =>
    {no:2}
    与以前的版本相比
    {no:2}

  • 将执行URI解码:

    “问候语=你好%3Dworld”
    =>
    {问候语:“你好世界”}


您可以使用此代码,但它不会检查任何错误:

var url = "program_id=11792&percentage=5";
var parts = url.split("&");
var paramsObj = {};
for (var i = 0; i < parts.length; i++) {
   var keyAndValue = parts[i].split("=");
   paramsObj[keyAndValue[0]] = paramsObj[keyAndValue[1]];
}
console.log(paramsObj); // here's your object
var url=“program_id=11792&percentage=5”;
var parts=url.split(“&”);
var paramsObj={};
对于(变量i=0;i

如果想要字符串而不是对象,可以对结果对象调用
JSON.stringify

如果您感兴趣,我编写了一个通用解决方案:


该参数字符串看起来不正确decoded@Quentin对不起,我不知道我在问什么。我更新了标题。如果您不知道,可能还有JSON的副本!==我喜欢一般模式,但这是reduce的一个奇怪用法。这段代码虽然简单,但很难阅读,因为您不必要地将它涂抹到两行上。@Brandon这是reduce的一个非常常见的用法,我建议您也处理数字
m[o[0]]=o[1]==parseFloat(o[1],10)?parseFloat(o[1],10):o[1]
@megawac:好主意,我喜欢用紧凑的x==+x来检查它是否是一个数字。@megawac:它是否也应该尝试找出
true
false
可能不是字符串?这似乎是一个很滑的斜率。@ CristiMihai:你可能想考虑添加<代码>解码DeCurrimoTun> <代码>,把它变成一个普通的字符串。请参见下面@CristiMihai的相同解决方案
params.split('&').map(function(i) { 
    return i.split('=');
}).reduce(function(memo, i) { 
    memo[i[0]] = i[1] == +i[1] ? parseFloat(i[1],10) : decodeURIComponent(i[1]); 
    return memo;
}, {});
var url = "program_id=11792&percentage=5";
var parts = url.split("&");
var paramsObj = {};
for (var i = 0; i < parts.length; i++) {
   var keyAndValue = parts[i].split("=");
   paramsObj[keyAndValue[0]] = paramsObj[keyAndValue[1]];
}
console.log(paramsObj); // here's your object
var convert = function(params) {
    return params.split("&").map(function(item) {
        return item.split("=");
    }).reduce(function(obj, pair) {
        obj[pair[0]] = decodeURIComponent(pair[1]);
        return obj;
    }, {});
};

convert("program_id=11792&percentage=5&name=Andrew%20Wei");
//=> Object {program_id: "11792", percentage: "5", name: "Andrew Wei"}