javascripturlurl-parametersurl-parsing

How to convert URL parameters to a JavaScript object?


I have a string like this:

abc=foo&def=%5Basf%5D&xyz=5

How can I convert it into a JavaScript object like this?

{
  abc: 'foo',
  def: '[asf]',
  xyz: 5
}

Solution

  • In the year 2021... Please consider this obsolete.

    Edit

    This edit improves and explains the answer based on the comments.

    var search = location.search.substring(1);
    JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
    

    Example

    Parse abc=foo&def=%5Basf%5D&xyz=5 in five steps:

    which is legal JSON.

    An improved solution allows for more characters in the search string. It uses a reviver function for URI decoding:

    var search = location.search.substring(1);
    JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value) })
    

    Example

    search = "abc=foo&def=%5Basf%5D&xyz=5&foo=b%3Dar";
    

    gives

    Object {abc: "foo", def: "[asf]", xyz: "5", foo: "b=ar"}
    

    Original answer

    A one-liner:

    JSON.parse('{"' + decodeURI("abc=foo&def=%5Basf%5D&xyz=5".replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}')