JSON e LSL (1 di 4)

JSON è un formato per il trasferimento dei dati, ovvero una serie di regole specifiche su come organizzare dati per consentire il passaggio di questi tra applicazioni differenti. JSON ha riscosso molto successo in ambito web per la sua maggior semplicità ed immediatezza rispetto ad alternative più potenti ma anche più complesse e articolate, XML in primis.

In LSL la sua introduzione di fatto ha aperto la possibilità di utilizzare strutture array vere e proprie, cosa non possibile (o possibile in maniera molto limitata) con List.
I principali vantaggi offerti da JSon rispetto a List consistono in:

– possibilità di costruire array multidimensionali / nidificati
– possibilità di avere array associativi

Buttati lì così questi punti non dicono molto, me ne rendo conto, ma prima di vedere nella pratica cosa comportano questi punti è necessario fare una breve panoramica di JSon in LSL.

1) Le specifiche di JSON prevedono un ristretto set di tipi di variabili, alcune di queste (come object, boolean) non sono presenti in LSL e la loro introduzione avrebbe comportato un enorme di lavoro di riscrittura del linguaggio, altresì ci sono dei tipi di variabili LSL (come vector, rotation, key) non specificatamente presenti in JSON.

Per introdurre la gestione di elementi JSON senza rivoluzionare l’intero LSL la LL ha optato per un approccio ‘morbido’ (..o tricky) ovvero ogni struttura JSON viene di fatto memorizzata, in una unica stringa, sarà poi compito delle nuove funzioni specificatamente create il poter gestire queste stringe come elementi JSON. Questa scelta a sua volta comporta una serie di limitazioni che è bene tenere a mente in fase di sviluppo e debug, ma le vedremo in fondo all’articolo (consumo memoria, validazione dati)

2) Sino ad ora ho sempre parlato di elementi JSON, questo perchè di fatto JSON prevede 2 tipi distinti di array, i JSON Array (che sono degli array numerici classici) e i JSON Object (che sono degli array associativi, ovvero che usano nomi come indici invece che numeri).
Non preoccupatevi, procedendo con la letura diventerà tutto più chiaro (almeno spero).


JSON ARRAY

I JSON Array non sono altro che array numerici, ovvero un eleco di valori a cui viene associato un indice numerico progressivi, sono in pratica la cosa più vicina ai List di LSL.  La sintassi per i JSON Array non è complicata, di base consiste nel inserire i valori che vogliamo memorizzare all’interno di una coppia di parentesi quadre e separando i valori tra loro con una virgola:

mio_array_test_1 = [ 123, <123.0, 58, 23>, 34 ]

Nella riga di cui sopra ho cioè memorizzato 3 valori: un intero, un vector e un’altro intero.

Però i valori JSON devono essere memorizzati in LSL come stringhe per cui la sintassi corretta completa sarà

string mio_array_test_1 = "[ 123, <123.0, 58, 23>, 34 ]";

come potete vedere non differisce tanto dal suo corrispondente alternativo fatto con un List:

list mio_array_test_2 = [123, <123.0, 58, 23>, 34 ];

Attenzione: Un appunto a parte, ma assolutamente essenziale, è necessario per le stringhe.
LSL richiede che ogni stringa sia delimitata dai doppi apici ( “sono una stringa” ), ma dato che l’intero array a sua volta è memorizzato come stringa utilizzare questa notazione comporta un problema per LSL che non sa quando finisce cosa.

Detto in altre parole, questo rappresenta un problema in quando inserendo un doppio apice all’interno dell’array questo costringerebbe LSL a considerare la stringa che rappresenta l’intero array già terminata prima della sua effettiva conclusione.

"[ 11, 22, "ciao", 33]" LSL leggerebbe "[ 11, 22, " ciao ", 33]"

…cioè leggerebbe invece che una unica sequenza di caratteri due sequenze separate tra loro e inframezzate da altri caratteri privi di senso per LSL, il tutto provocando inevitabili malfunzionamenti se non addirittura blocchi dello script stesso.

Come scrivere degli apici all’interno di una stringa allora?

La soluzione per ovviare a questo problema consiste nell’utilizzare il carattere di escape ( \” ) degli apici al posto degli apici stessi. Se volessimo correggere quindi il nostro array dovremo scrivere:

"[ 11, 22, \"ciao\", 33]"

Questa necessità ci obbliga a prestare una maggiore attenzione quando popoliamo un array, ma è anche l’unico modo per poter scrivere direttamente dei valori stringa all’interno di un JSON Array in LSL.

Bene, per ora è tutto, nella prossima parte vederemo come effettuare alcune operazioni base (lettura e scrittura dei dati, confronto tra array) e vedremo come gli elementi JSON ci permettono di gestire array multidimensionali, per gli esempi useremo sempre i JSON Array, in quanto sono l’elemento più semplice da imparare e  il loro comportamento non differisce da quello dai JSON Object, se non per qualche dettaglio che affronteremo quando ci occuperemo specificatamente degli oggetti Json.

Posted in LSL and tagged , , , , , .

Leave a Reply

Your email address will not be published.