JavaScript如何使用jQuery将查询字符串转换成JSON格式,然后再将其转换回查询字符串?

11
希望您会发现以下函数对将查询字符串转换为JSON对象非常有用。

希望您会发现以下函数对将查询字符串转换为JSON对象非常有用。

var queryStringToJSON = function (url) {
    if (url === '')
        return '';
    var pairs = (url || location.search).slice(1).split('&');
    var result = {};
    for (var idx in pairs) {
        var pair = pairs[idx].split('=');
        if (!!pair[0])
            result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
    }
    return result;
}

使用方法:

获取当前窗口的查询字符串

var result = queryStringToJSON() // without any parameter

从自定义查询字符串获取JSON:

var result = queryStringToJSON('?name=prem&age=30&HEIGHT=5.8')

输出: {name:"prem", age:"30", height:"5.8"} //所有键都转换为小写字母

要将其转换回URL,您可以使用jQuery param方法。

$.param(result)

要操作您的查询字符串,只需使用JavaScript中的标准对象操作,并再次使用$.param方法即可。

result.age=35;
delete result['name']; 

3
那么你的问题是什么? - Tomi Lammi
他刚刚发布了一个有用的函数来帮助其他人...所以这里没有问题... - patel.milanb
1
那我为什么在“问题”部分找到了这个? - Tomi Lammi
感谢 @premChandaraSingh - Mohasin Ali
这似乎不能与数组一起使用:例如:?=name=Tom&name=Jeff - KyorCode
2个回答

1

或者... 代替:

for (var idx in pairs) {
    var pair = pairs[idx].split('=');
    if (!!pair[0])
        result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
}

尝试:

result = pairs.reduce(function(a,b) {
     var pair = b.split("=");
     a[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
     return a;
},{});

这个功能与之前的相同,但使用了reduce()函数,因为它是原生JavaScript函数,所以可能更快。


1
如果您需要支持IE8或更低版本,则需要为reduce使用polyfill。在此处查看:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Polyfill - Dave

1

如果您使用了url || location.search,那么代码是可行的,但需要删除if(url === '') return ''或者将其修改为:

var queryStringToJSON = function (url) {
    url = url || location.search;// url or location.search
    if (url === '')
        return '';// return if url and location.search not found
    // your remainig code
}

明白了,但这是一个特殊的检查。在字符串操作中,''是一种特殊的假值。因此,我只想检查如果假值是空字符串,就原样返回。 - Premchandra Singh
那么你不应该在这一行中使用 location.search,即 var pairs = (url || location.search).slice(1).split('&'); - Rohan Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接