[javascript] objecten serialiseren

Pagina: 1
Acties:

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Hoi allemaal,

ik ben een beetje aan het klooien met javascript, en ik vroeg me af of er een goede manier is om objecten te serialiseren in javascript. Ik wil namelijk mijn objecten opslaan in cookies. Ik zag bijvoorbeeld een oplossing van crisp, dit is opzich een mooie manier om objecten te serialiseren. Nu wil ik ze met javascript ook weer kunnen deserialiseren, ik zou het opzich makkelijk met php kunnen doen, maar dat is niet leuk. Natuurlijk is het mogelijk om een eigen parser te schrijven voor bijvoorbeeld geserialiseerde php-objecten, maar als er al standaardfuncties voor bestaan dan is dit een beetje overbodig.

Dus: weet iemand of hier standaardfuncties voor bestaan? Zo nee, dan hoef ik echt geen parser: dan ga ik 'm lekker zelf schrijven :).

offtopic:
Is serialiseren trouwens een nederlands woord?

  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Een standaardfunctie is hier niet voor, je zult dus zelf crisp's functie omgekeerd moeten schrijven ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:13

crisp

Devver

Pixelated

En jij dacht dat ik die zelf nog niet had? ;)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function unserialize(data)
{
    var re = /(\w):([\d.]+)[:;]/g;
    re.lastIndex = 0;
    return unserialize_do(re, data);
}

function unserialize_do(re, data)
{
    var cur, ret = '', i, key;
    if ((cur = re.exec(data)) !== null)
    {
        switch (cur[1])
        {
            case 'a':
            case 'o':
                ret = cur[1] == 'a' ? [] : {};
                i = cur[2];
                while (i--)
                {
                    key = unserialize_do(re, data);
                    ret[key] = unserialize_do(re, data);
                }
                break;
            case 's':
                ret = data.substr(re.lastIndex+1, cur[2]);
                re.lastIndex += cur[2] - 1;
                break;
            case 'i':
            case 'd':
                ret = cur[2] / 1;
                break;
            case 'b':
                ret = cur[2] ? true : false;
                break;
        }
    }

    return ret;
}

wel gaarne credits vermelden als je dit gebruikt.

Intentionally left blank