将查询字符串反序列化为JSON对象
试图找到如何使{foo:"bar"}
来自?...&foo=bar&...
但谷歌搜索并只得到jQuery.params
相反。 任何建议请(内置的javascript函数, jquery , underscore.js – 一切顺利)? 或者,我是否需要自己实施(不是很麻烦,只是试图不重新发明轮子)?
你有Ben Alman的jQuery BBQ
和jQuery.deparam
。 它被描述为The opposite of jQuery.param, pretty much.
http://benalman.com/code/projects/jquery-bbq/examples/deparam/
第一个例子就是你需要的。
我在这里发布我的函数以防万一其他会看起来并希望直接得到它不需要jquery本机JS。 因为我一直在寻找同样的东西,并在查看其他答案之后终于完成了这个function:
function queryStringToJSON(queryString) { if(queryString.indexOf('?') > -1){ queryString = queryString.split('?')[1]; } var pairs = queryString.split('&'); var result = {}; pairs.forEach(function(pair) { pair = pair.split('='); result[pair[0]] = decodeURIComponent(pair[1] || ''); }); return result; } console.log(queryStringToJSON(window.location.href)); console.log(queryStringToJSON('test=1&check=wow'));//Object {test: "1", check: "wow"}
实际上@talsibony的上述答案没有考虑查询字符串数组(例如test=1&test=2&test=3&check=wow&such=doge
)。 这是我的实现:
function queryStringToJSON(qs) { qs = qs || location.search.slice(1); var pairs = qs.split('&'); var result = {}; pairs.forEach(function(p) { var pair = p.split('='); var key = pair[0]; var value = decodeURIComponent(pair[1] || ''); if( result[key] ) { if( Object.prototype.toString.call( result[key] ) === '[object Array]' ) { result[key].push( value ); } else { result[key] = [ result[key], value ]; } } else { result[key] = value; } }); return JSON.parse(JSON.stringify(result)); };
对于简单和扁平的查询字符串,这样的事情就可以了
const queryStringToObject = (queryString) => { let obj = {} if(queryString) { queryString.slice(1).split('&').map((item) => { const [ k, v ] = item.split('=') v ? obj[k] = v : null }) } return obj }