JSONFox version 2.0 con nuevas características

2,043 views
Skip to first unread message

Irwin Rodriguez

unread,
Jul 28, 2020, 4:09:56 PM7/28/20
to publice...@googlegroups.com
Saludos comunidad,

He reescrito la librería JSONFox utilizando un nuevo algoritmo conocido como "Recursive Descent Parser" o RDP para abreviar, está escrita enteramente en Visual FoxPro 9.0 y ahora se puede utilizar en su versión compilada (App) de la siguiente manera:

Do LocFile("JSONFox", "app")

Es compatible con la antigua versión 1.9 sobre todo con las funciones Decode() y Encode() que ahora tienen sus nuevas versiones llamadas Parse() y Stringify().

Al invocar JSONFox.app se agregará un objeto llamado "Json" como propiedad del objeto global _Screen. Ahora ya es posible comenzar a usarlo:


 obj = _Screen.Json.Parse('{"foo": "bar"}')
 ?obj.foo

Nueva función Stringify()
Su función es formatear / indentar una cadena JSON a una representación legible. Puede recibir tanto un string como un objeto y el resultado será el mismo (una cadena formateada).

* Stringify Example
cJson = '{"age":45,"birthdate":"1985-11-15","created":"2020-07-28 09:29:41 PM","fullname":"Jhon Doe","gender":"Male","married":true,"soports":["running","swiming","basket-ball"]}'
?_Screen.Json.Stringify(cJson)

Para más detalle por favor visiten: https://github.com/Irwin1985/JSONFox

Hasta la próxima!

Irwin Rodriguez

unread,
Jul 28, 2020, 4:17:49 PM7/28/20
to publice...@googlegroups.com
Olvidé comentarles que también está disponible en todo momento una clase decorator llamada JSON la cual pueden utilizar para serializar todas aquellas clases que necesiten.

* Decorate and print any class
* Suppose you have a person class.
oPerson = CreateObject("PersonClass")
With oPerson
	.fullname = "John Doe"
	.age = 45
	.gender = "Male"
	.married = .T.
	.birthdate = Date(1985, 11, 15)
	.created = Datetime()
EndWith

* Now you need to extend this person class
oJohn = NewObject("JSon", "JsonDecorator.prg")
?oJohn.to_json()
{
  
"age": 45,
  "birthdate": "1985-11-15",
  "created": "2020-07-28 09:29:41 PM"
,
  "fullname": "John Doe",
  

Edwin Duran

unread,
Jul 28, 2020, 4:34:49 PM7/28/20
to Comunidad de Visual Foxpro en Español
Gracias Irwin por el porte, veo que esta _Screen.Json.CursorToJson('cGames'
y cuando va a salir _Screen.Json.JsonToCursor('cGames'

mil gracias

Jean Pierre Adonis De La Cruz Garcia

unread,
Jul 28, 2020, 5:41:34 PM7/28/20
to Comunidad de Visual Foxpro en Español
Excelente trabajo muchachon.

Irwin Rodriguez

unread,
Jul 29, 2020, 4:13:55 AM7/29/20
to publice...@googlegroups.com
Gracias por la sugerencia Edwin, ya he creado la función JSONToCursor() con la siguiente firma:

* JSONToCursor(JSONString As String, tcCursorName As String [, tnDataSession As Integer]).
Create Cursor cGames (game c(25), launched i(4))
Insert into cGames Values('Pac-Man', 1980)
Insert into cGames Values('Super Mario Bros', 1985)
Insert into cGames Values('Space Invaders', 1978)
Insert into cGames Values('The Legend of Zelda', 1986)
lcJSONStr = _Screen.Json.CursorToJson('cGames')
_Screen.Json.JSONToCursor(lcJSONStr, 'cGames')

He parseado una cadena JSON de unas 80 mil líneas equivalente a un cursor de 500 filas en 3.5 segundos:
image.png

 La estructura del cursor resultante es la siguiente:
image.png

Truncando las columnas de tipo Character al contenido más largo (34 en el caso de email) en lugar de crear una longitud estándar de 250 caracteres. Faltaría hacer lo mismo para las columnas tipo Numeric ya que el estándar actual es N(18,5).

Saludos!




--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/7d4b4869-215b-41d5-a28f-89f2f6a7dc3do%40googlegroups.com.

Edwin Duran

unread,
Jul 29, 2020, 7:52:27 AM7/29/20
to Comunidad de Visual Foxpro en Español
Gracias, Mil gracias
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

mapner

unread,
Jul 29, 2020, 10:17:35 AM7/29/20
to Comunidad de Visual Foxpro en Español
Gran aporte a la comunidad Irwin, te felicito!
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

wpalomo

unread,
Jul 29, 2020, 10:32:02 AM7/29/20
to Comunidad de Visual Foxpro en Español
Excelente Iwin, muy buen aporte.

Saludos
Wilson Palomo

Jorge Lozano Manifacio

unread,
Jul 29, 2020, 8:59:02 PM7/29/20
to Comunidad de Visual Foxpro en Español
Perfecto Maestro .... yo estoy trabajando con esa libreria ... no hay cambios radicales .. solo cambiar la cargada ... PERFECTO ..
Gracias por tus aportes ... El Zorrito mas vivo que nunca por mucho mas tiempo


El martes, 28 de julio de 2020, 15:09:56 (UTC-5), Irwin Rodriguez escribió:

robson...@hotmail.com

unread,
Jul 30, 2020, 8:00:25 AM7/30/20
to Comunidad de Visual Foxpro en Español
Cara isto foi muito bom, obrigado!!!! vai ajudar muito.

Luis suescún

unread,
Jul 30, 2020, 10:14:24 AM7/30/20
to publice...@googlegroups.com
muchas y benditas gracias Irwin.

eres un gran maestro.



--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CABooBBkrqp4%2BOJSgjx-iSMqLre912rt_VEV8XekjL63virw9PA%40mail.gmail.com.

Esteban Herrero

unread,
Jul 30, 2020, 3:38:41 PM7/30/20
to publice...@googlegroups.com

Genial Irwin.

 

Muy buen trabajo.

 

Un abrazo.

 

Saludos

Esteban

--

Irwin Rodriguez

unread,
Jul 31, 2020, 4:42:08 AM7/31/20
to publice...@googlegroups.com
Nuevas actualizaciones que incluyen:
1. Reconocimiento de números negativos.
2. Parsing de arrays vacíos.
3. Parsing para DATETIME() con los siguientes formatos soportados:
   3.1 Javascript
   3.2 ISO 8601
   3.3 Visual Foxpro

El mar., 28 jul. 2020 a las 22:09, Irwin Rodriguez (<rodrigu...@gmail.com>) escribió:

Edwin Duran

unread,
Jul 31, 2020, 9:36:28 AM7/31/20
to Comunidad de Visual Foxpro en Español
Gracias

Irwin Rodriguez

unread,
Aug 5, 2020, 4:50:29 AM8/5/20
to Comunidad de Visual Foxpro en Español
Nueva versión 2.1 ahora incluye un visor JSON con indentación y resaltado de sintaxis gracias al objeto OLE RichTextBox, el resultado no es exactamente el que tenia en mente pero por ahora cumple con mis necesidades y espero que les sea de utilidad a ustedes también.


Hasta la próxima!


sample2.png
sample1.png

Irwin Rodriguez

unread,
Aug 7, 2020, 5:58:46 PM8/7/20
to Comunidad de Visual Foxpro en Español
Nueva actualización con cambios internos y un cambio externo:

_Screen.Json.Encode(toObjRef As Object [, tcFlags])

Donde el parámetro tcFlags admite una cadena de uno o varios caracteres que representarán el ámbito de las propiedades del objeto toObjRef 

P - Protected
H - Hidden
G - Public
N - Native
U - User Defined
C - Changed
I - Inherited
B - Base
R - Read Only  

Por ejemplo si queremos serializar el objeto global _Screen pero solo con las propiedades de solo lectura y las creadas por el usuario entonces:

?_Screen.Json.Encode(_Screen, "RU")


Saludos!

El martes, 28 de julio de 2020 a las 22:09:56 UTC+2, Irwin Rodriguez escribió:

Valentin Fernandez

unread,
Aug 9, 2020, 12:00:07 PM8/9/20
to publice...@googlegroups.com
Gracias Irwin por tu esfuerzo y conocimiento compartidos

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--

Atentamente:
Valentín Fernández

wilz...@gmail.com

unread,
Feb 13, 2025, 8:49:35 AM2/13/25
to Comunidad de Visual Foxpro en Español
Tengo un problema al utilizarlo, si la descripción tiene acentos o caracteres especiales muestra mal al convertir el Json a Cursor 

Descripcion muestra mal.jpg

Al traer el Json de la base de datos trae bien, lo guardé en texto plano para verificar.

Antes de parsear.jpg
Intenté aplicar algunas recomendaciones para UTF - 8, pero igual no muestra bien

Codigo.jpg

Browse.jpg

HernanCano

unread,
Feb 26, 2025, 7:47:24 AM2/26/25
to Comunidad de Visual Foxpro en Español
Pasa el Factura.JSON y te indicamos qué hacer.

wilz...@gmail.com

unread,
Feb 26, 2025, 8:26:11 AM2/26/25
to Comunidad de Visual Foxpro en Español
factura.json

Zarlu

unread,
Feb 26, 2025, 10:48:53 AM2/26/25
to Comunidad de Visual Foxpro en Español
Buenos días wilzygon !

Prueba con:
lcJsonResult=STRCONV( lcJsonResult,11)

Suerte
zarlu
Chetumal, Quintana Roo, México

Sin título.png

wilz...@gmail.com

unread,
Feb 26, 2025, 11:22:42 AM2/26/25
to Comunidad de Visual Foxpro en Español
Muchísimas gracias, aparentemente se solucionó. Voy a estar probando.

Muchas gracias de nuevo.

HernanCano

unread,
Feb 27, 2025, 11:17:00 AM2/27/25
to Comunidad de Visual Foxpro en Español
O sea que estabas malinterpretando lo referente a UFT8:

Suponías que estaba en ASCII y lo querías poner en UTF8.

Pero es ilógico, porque si viene en ASCII, entonces no necesitas convertirlo a algo (para usarlo en VFP).

Se observa que el JSON que compartes está en formato UTF8 (ver imagen), por lo tanto no hay que ejecutar 

lcJsonResult = STRCONV(lcJsonResult, 9) && 9 significa de ANSI a UTF-8

sino más bien

lcJsonResult = STRCONV(lcJsonResult, 11) && 11 significa de UTF-8 a ANSI



borrable1.png

wilz...@gmail.com

unread,
Feb 27, 2025, 9:10:12 PM2/27/25
to Comunidad de Visual Foxpro en Español
Gracias. Como tenía ese error consulté a chatGPT y me recomendó agregar esa linea, probé con 6, 9, no recuerdo cuales otros me recomendó, pero ninguno funcionaba

Genesis Palma

unread,
Mar 1, 2025, 2:09:30 PM3/1/25
to publice...@googlegroups.com

Cfldbnf fnfln


--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages