Funkce serialize (převedení objektu nebo pole do řetězce) v javascriptu

22.12.2004 01:12

Je dost možné, že jste se již někdy setkali s funkcí serialize, která je myslím dobře známa např. z PHP, kde ji hojně využívám při ukládání pole hodnot do cookies. A co čert nechtěl - v javascriptu podobná funkce není, takže si nějak jednoduše uložit pole hodnot nebo objekt je výrazný problém. Musím říci, že v tomto případě ani pan Google neuspěl. Sice jsem nalezl několik “serialize" funkcí, ale všechny byly příliš složité a náročné. Tudíž nezbylo nic jiného, než si danou funkci napsat (nebo o to někoho požádat :) )

Implementace funkce serialize a unserialize

Po vzoru funkce z PHP můj kolega z práce (Petr Doležal), vytvořil požadovanou funkci, která převádí pole (nebo objekt) do řetězce, který lze poté snadno uložit třeba do cookie. Je to vcelku jednoduchá rekurzivní funkce, která se stále zanořuje až do nejnižší úrovně pole (objektu) a na konci vrátí pěkný řetězec, ve kterém je uloženo dané pole.

Samozřejmě je potřeba i funkce opačná, tzn. něco co nám z tohoto řetězce opět vytvoří použitelné pole nebo objekt. K tomu účelu poslouží funkce unserialize, která je opravdu velmi jednoduchá. Její celý fígl spočívá v zavolání funkce eval na daný řetězec. Všechny testované prohlížeče neměli problém s parsováním a vytvořením reálného pole (objektu). Jediné, co se nedá zaručit je posloupnost jednotlivých položek objektu, tzn. položky mohou být proházené, ale to už záleží jak si s daným výrazem poradí prohlížeč.

Ukázka použití:

var pole = Array();
pole['a'] = 'hodnota a';
pole['b'] = 'hodnota b';
pole['c'] = 'hodnota c';
pole['sub'] = Array();
pole['sub'][0] = 'sub-a';
pole['sub'][1] = 'sub-b';
pole['sub'][3] = 'sub-c';

var serialized = serialize(pole);

// Obsah proměnné serialized:
document.write(serialized);
// vystup: 
// {'a':'hodnota a','b':'hodnota b','c':'a hodnota c',
sub:{'0':'sub-a','1':'sub-b','3':'sub-c'}}

var novePole = unserialize(serialized);
document.write(novePole['sub'][0]);
// vystup:
// sub-a

Odkazy

Zanechte komentář k příspěvku

XHTML: Můžete použít následující tagy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>