Tuesday, 2 June 2009

JSON (JavaScript Object Notation) en Delphi

JSON (JavaScript Object Notation - Notación de Objetos de JavaScript) es un formato ligero de intercambio de datos. Se basa en un subconjunto del lenguaje de Programación JavaScript. Es un formato de texto que es completamente independiente del lenguaje pero utiliza convenciones que son ampliamente conocidas por los programadores de la familia de lenguajes de C/C++, Java, JavaScript, Perl, Python, etc. De esta manera JSON se convierte en un lenguaje ideal para el intercambio de datos.

JSON está constituido por dos estructuras:
  • Una colección de pares de nombre/valor. En varios lenguajes esto es conocido como un objeto, registro, estructura, diccionario, tabla hash, lista de claves o un array asociativo.
  • Una lista ordenada de valores. En la mayoría de los lenguajes, esto se implementa como arreglos, vectores, listas o secuencia.
Estas son estructuras universales; virtualmente todos los lenguajes de programación las soportan de una forma u otra. Cada vez hay más soporte de JSON mediante el uso de paquetes escritos por terceras partes. La lista de lenguajes soportados incluye ActionScript, C, C#, ColdFusion, Common Lisp, Delphi, E, Eiffel, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, y Lua.

En la web oficial de JSON, json.org, podemos encontrar toda la lista de lenguajes que incorporan JSON. En este caso, yo voy a mostrar un ejemplo de la JSON Delphi Library. En esta librería Open Source, podemos encontrar el desarrollo de JSON y varios proyectos de ejemplo para que podamos ver su configuración y utilización. Además, en la web de json.org, también nos hablan de 2 proyectos más para delphi, JSON Super Objects, y uJson.

Si analizamos el ejemplo, lo veremos un poco más claro:




program sample3;

{$APPTYPE CONSOLE}

uses
variants,
SysUtils,
uLkJSON in 'uLkJSON.pas';

var
js,xs:TlkJSONobject;
ws: TlkJSONstring;
s,s2, s1, s3: String;
begin
s := '{"\"string1\"":"123","\"string2\"":"5676","\"string3\"":"test",'+
'"childobject":{"objstr1":"Oone","objstr2":"Otwo","objstr3":"Othree"}}';
js := TlkJSON.ParseText(s) as TlkJSONobject;

s1 := vartostr(js.Field['"string1"'].Value);
writeln(s1);
s2 := vartostr(js.Field['"string2"'].Value);
writeln(s2);
s3 := vartostr(js.Field['"string3"'].Value);
writeln(s3);

readln;
js.Free;
end.




Como podemos ver, la cadena de texto formada por :
s := '{"\"string1\"":"123","\"string2\"":"5676","\"string3"":"test",'+"childobject":"objstr1":"Oone",
"objstr2":"Otwo","objstr3":"Othree"}}';

hace algo parecido a las regular expresions de mi anterior post. Luego el protocolo JSON, parsea el texto en busca de las keywords que tiene definidas, y de esta manera obtiene los registros string1, 2 y 3. La salida por pantalla de programa:

Además, como he indicado antes, al ser ideal para el intercambio de datos, tenemos el protocolo JSON RPC (Llamada de procedimiento remoto con JSON). Hace varios meses, colgué un post sobre XML-RPC que utiliza XML para realizar la llamada de procedimiento remoto. Ahora con json, tendríamos que mirar si el funcionamiento puede mejorar en vez de utilizar el XML.

  • Enlaces de interés:
JSON in J2ME.
JSON con PHP.

0 comments:

Post a Comment