Written by nomorelogic Marzo 13, 2012, 07:54:00 pm22530 ViewsRating: 0 (0 Rates)Print
Attenzione
L'articolo è da considerarsi obsoleto in quanto fa uso di una libreria che oramai è stata pienamente superata dal codice presente nella unit fpjson distribuita insieme al compilatore pascal. Una documentazione molto esauriente (tratta sia XML che JSON) è stata fornita dall'autore stesso della unit ed è visionabile tramite il seguente link: http://www.freepascal.org/~michael/articles/webdata/webdata.pdf
Segue l'articolo originale.
Articolo originale
Si sente spesso parlare di file JSON e se ne sente spesso parlare relativamente allo sviluppo su web in quanto basato sul linguaggio JavaScript (Standard ECMA-262 3ª edizione dicembre 1999). In realtà la sua vera natura - quella di essere un formato per l'interscambio di dati tra applicazioni - lo ha portato ad essere usato nei contesti più disparati nell'ambito della programmazione e, come si può desumere da "http://www.json.org/", oramai esistono librerie per moltissimi linguaggi di programmazione, incluso il FreePascal.
Ha diverse mancanze rispetto all'XML. Ad esempio non ha il concetto di attributo e non è utilizzabile né con file XLST, né con file DTD. Ha però dalla sua la semplicità della rappresentazione delle strutture dati (e quindi facilità nel parsing) e la semplicità di essere letto e manipolato dagli esseri umani.
Giusto per avere un primo e semplice approccio, segue un esempio in questo formato:
La semplicità salta subito all'occhio. Si tratta fondamentalmente di combinazioni nome/valore dove il valore, quando di tipo stringa, è delimitato dal doppio apice. Un accenno particolare va ai campi "email" ed "indirizzi" che in realtà sono rappresentazioni di array. Un array è delimitato dalle parentesi quadre e quando composto da una semplice lista di valori ("email") basta indicare gli elementi separati da una virgola. Quando invece l'array è composto da tipi strutturati ("indirizzi"), gli elementi vanno specificati tra parentesi graffe.
Ora però, come esempio pratico, vorrei proporre l'uso di questo formato per la memorizzazione delle impostazioni necessarie ad una ipotetica applicazione dedicata all'aggiornamento dei database.
La libreria che andremo a provare l'ho stata scaricata dal sito http://code.google.com/p/superobject/downloads/list e per chi volesse saperne di più: http://www.progdigy.com/ Si tratta di sorgenti con doppia licenza: MPL o LGPL. Una volta decompresso il file superobjectv1.2.4.zip, avremo a disposizione 2 file sorgenti chiamati superobject.pas e superxmlparser.pas che si occupano rispettivamente del parsing dei file JSON ed XML. A corredo anche una serie di demo e di progetti test da studiare. Tra le demo, ci sono interessanti applicazioni con google search, RTTI e VirtualTreeView.
Tornando al nostro ipotetico tool per l'aggiornamento di database, andiamo a creare, con Lazarus, una nuova applicazione. Tramite l'analizzatore progetti possiamo aggiungere la unit superobject.pas al nostro progetto (il tutto risiede in un unico file .PAS e non ci sono pacchetti da installare). Sulla form principale aggiungiamo: - un TEdit chiamato edDefPath ed impostiamo la proprietà Text con la fullpath del file database.def - un TButton - un TMemo chiamato Memo1
Torniamo al sorgente della form principale e, sotto implementation, mettiamo in "uses" superobject. Fatto questo, nella sezione public, dichiariamo: procedure ScanDef(FilePath: string; log: TStrings);
procedure TForm1.Button1Click(Sender: TObject); begin ScanDef(edDefPath.Text, Memo1.Lines); end;
a questo punto non resta che lanciare il tutto con F9 e cliccare su Button1. Se tutto è andato come doveva, vedrete popolare il Memo con le impostazioni lette dal file.
Quello mostrato qui è solo un piccolo sottoinsieme delle possibilità che si hanno a disposizione con l'utilizzo di questa libreria; una volta iniziato a capire come funziona è possibile dare un'occhiata alle varie demo e al file README.html per scoprirne altre funzionalità.
Buon Lavoro. nomorelogic
About the author
nomorelogic registered at Italian community of Lazarus and Free Pascal on Marzo 10, 2012, 12:27:59 pm and has posted 2908 posts in the boards since then. Last visit was Ottobre 11, 2024, 04:26:31 pm.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.