JSON Parser Para VFP

From codeWiki
Jump to: navigation, search

Por: VictorEspina


Para los que, como yo, nunca hayan escuchado hablar de JSON, se trata de una tecnologia ampliamente usada en la web para el intercambio de datos entre sistemas desconectados. Básicamente es lenguaje muy simple que permite definir objetos y su contenido. Los parsers JSON hacen dos cosas:

  • Toman una referencia a un objeto (normalmente JavaScript) y genera una representación JSON en forma de string
  • Toman un string JSON y devuelve el objeto original


A pesar que en el sitio JSON.org se pueden encontrar dos parsers JSON para VFP, decidi hacer mi propio parser usando solo código VFP y, de paso, incluyendo un par de mejoras al estilo fox. La mejor de estas adiciones es lo que llame "schema". Un schema es basicamente una forma de definir uns estructura de datos reutilizable, al estilo de la construcción STRUCT en C# (pero sin la posibilidad de incluir metodos).


Por ejemplo, para definir el schema "User":

JSON.declareSchema("User","{loginName:string, fullName: string, profileId: numeric, active: boolean}")


Luego, cuando queremos trabajar con un objeto que represente un usuario, solo hacemos:

oUser = JSONObject("schema:User")
oUser.loginName = 'vespina'
oUser.fullName = 'Victor Espina'
oUser.profileId = 25
oUser.active = .T.


Supongamos ahora que queremos almacenar los datos del usuario que modifico un registro. Con JSON podriamos hacerlo asi:

SELECT clientes
REPLACE rowLastUpd WITH DATETIME(),;
        rowUpdBy   WITH oUser.ToJSON()


Luego, cuando queramos mostrar quien modifico el registro, hacemos:

oUser = JSONObject(clientes.rowUpdBy)
MESSAGEBOX("Este registro fue modificado por " + oUser.fullName)


Otro uso muy común de JSON es crear objetos sobre la marcha de forma sencilla:

oPoint = JSONObject("{x:10, y:20}")
?oPoint.x --> 10


Como ven, las posibilidades son muchas. En la documentación de la libreria hay multitud de ejemplos de todo lo que se puede hacer con ella.


Descargar desde CodePlex.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox