|
Efterhånden som arbejdet med AJAX bliver mere seriøst, har jeg fået behov for en nem måde at håndtere de JSON objekter jeg genererer på serveren til klienten. Til dette formål har jeg derfor lavet en ASP klasse som kan hjælpe mig med at gøre det beskidte arbejde i forhold til at komme fra rå data til et JSON-objekt. Klassen er grundlæggende bygget op omkring arrays som indeholder key/value par for de enkelte felter i JSON-objektet. Hver value kan være af de basale typer i VBScript (String, Array, Integer, Double, Date, Boolean), samt JSON genereringsobjektet (for at kunne håndtere indlejrede JSON-objekter i JSON-objekter og arrays). Andre objekttyper ignoreres i denne sammenhæng. Tanken er at jeg skal kunne oprette atributter efter behov og struturere data som jeg har lyst til (bare jeg holder mig til det basale JSON-format). Et eksempel på hvordan jeg gerne vil kunne benytte min JSONObjectBuilder kunne være: dim builder Ovenstående skulle så gerne give mig flg. JSON (jeg har indsat linieskift og formatering for overskuelighedens skyld - det genererede resultat vil være pakket sammen på én linie): { Som det ses sker der en lille oversættelse af data, således formatet af streng, tal og boolske værdier overholder reglerne for de tilsvarende javascript-typer. Datoer omsættes til strenge, boolske værdier til "lower case" true eller false, apostroffer og backslash foranstilles med backslash og linieskift (vbCrLf) omsættes til "\n". Arrays omsættes til deres tilsvarende format i JS og objekter ligeså. Jeg har indsat selve klassen til at generere JSON-objekthierarkiet herunder. class JSONObjectBuilder Som du måske har luret, er klassen baseret på arrays som redimensioneres alt efter behov. Du kan selv sætte sætte bufferens størrelse (via size-egenskaben), hvis du skal lave store JSON-objekter med mange atributter. Det kan spare din server for lidt arbejde ifht. at skulle allokere ny hukommelse, flytte data og nedlægge brugt hukommelse i forbindelse med udvidelser af array'et. Hvis du ikke selv sætter størrelsen af attribut-bufferen, starter den ved 10 og forøges med yderligere 5, når der ikke er flere ledige, så du behøver ikke selv gøre noget for at få mere plads, men hvis du ved du skal oprette 100 atributter, kan du ligeså godt sætte størrelsen fra starten. Eksempel: dim i, builder Denne builder skal opfattes som et udgangspunkt for hvordan sådan en fætter kan laves. Der er klart områder hvor den kan optimeres, f.eks. de mange strengsammensætninger kunne optimeres med en lign. array-baseret strengbuffer (må se at få lavet en artikel om dette snart! :-)), hvor man putter hver strengstump i et array og ruger Join til at samle strengen. En metode som, i tilfælde at større strengmængder, performer væsentlig bedre end den sædvanlige s = s & s1 metode... |
| Sidst opdateret: 10-09-2008 19:02:26 |
|
Tilmeld link |
Tilføj Link |
Tilføj Link |
@-begynder Erklæring om beskyttelse af personlige oplysninger |