Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Takes a string in format "param1=value1&param2=value2" and returns an javascript object. Improved to handle multiple values with same name and to unescape url encoded values.
/**
* $.unserialize
*
* Takes a string in format "param1=value1&param2=value2" and returns an object { param1: 'value1', param2: 'value2' }. If the "param1" ends with "[]" the param is treated as an array.
*
* Example:
*
* Input: param1=value1&param2=value2
* Return: { param1 : value1, param2: value2 }
*
* Input: param1[]=value1&param1[]=value2
* Return: { param1: [ value1, value2 ] }
*
* @todo Support params like "param1[name]=value1" (should return { param1: { name: value1 } })
* Usage example: console.log($.unserialize("one="+escape("& = ?")+"&two="+escape("value1")+"&two="+escape("value2")+"&three[]="+escape("value1")+"&three[]="+escape("value2")));
*/
(function($){
$.unserialize = function(serializedString){
var str = decodeURI(serializedString);
var pairs = str.split('&');
var obj = {}, p, idx;
for (var i=0, n=pairs.length; i < n; i++) {
p = pairs[i].split('=');
idx = p[0];
if (obj[idx] === undefined) {
obj[idx] = unescape(p[1]);
}else{
if (typeof obj[idx] == "string") {
obj[idx]=[obj[idx]];
}
obj[idx].push(unescape(p[1]));
}
}
return obj;
};
})(jQuery);
@mppatterson

This comment has been minimized.

Copy link

commented Mar 28, 2014

Awesome, thanks! 👍

@sahanDissanayake

This comment has been minimized.

Copy link

commented Apr 28, 2015

@brucekirkpatrick, There is a problem with your function
This is my link right

http://localhost:1337/?categories=Bakery&categories=Bar&categories=Beer+Garden&categories=Brazilian+Restaurant&cooking=&sorted=Magic

If you see close of there are two words the a + is added, need to fix this

@sahanDissanayake

This comment has been minimized.

Copy link

commented Apr 28, 2015

// https://gist.github.com/brucekirkpatrick/7026682
/**
 * $.unserialize
 *
 * Takes a string in format "param1=value1&param2=value2" and returns an object { param1: 'value1', param2: 'value2' }. If the "param1" ends with "[]" the param is treated as an array.
 *
 * Example:
 *
 * Input:  param1=value1&param2=value2
 * Return: { param1 : value1, param2: value2 }
 *
 * Input:  param1[]=value1&param1[]=value2
 * Return: { param1: [ value1, value2 ] }
 *
 * @todo Support params like "param1[name]=value1" (should return { param1: { name: value1 } })
 * Usage example: console.log($.unserialize("one="+escape("& = ?")+"&two="+escape("value1")+"&two="+escape("value2")+"&three[]="+escape("value1")+"&three[]="+escape("value2")));
 */
(function($){
    $.unserialize = function(serializedString){
        var str = decodeURI(serializedString);
        var pairs = str.split('&');
        var obj = {}, p, idx;
        for (var i=0, n=pairs.length; i < n; i++) {
            p = pairs[i].split('=');
            idx = p[0]; 
            if (obj[idx] === undefined) {
                obj[idx] = unescape(p[1]).replace ( /\+/g, ' ' );
            }else{
                if (typeof obj[idx] == "string") {
                    obj[idx]=[obj[idx]];
                }
                obj[idx].push(unescape(p[1]).replace ( /\+/g, ' ' ));
            }
        }
        return obj;
    };
})(jQuery);
@doclucas

This comment has been minimized.

Copy link

commented Dec 22, 2015

Does this jQuery function do exactly the same as this js function?
https://github.com/kvz/phpjs/blob/master/functions/var/unserialize.js

@DannyFeliz

This comment has been minimized.

Copy link

commented Mar 16, 2016

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.