Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sobre JSON. ¿Qué usar? (https://www.clubdelphi.com/foros/showthread.php?t=94605)

elrayo76 24-04-2020 17:24:59

Sobre JSON. ¿Qué usar?
 
Buenas,


Les quería consultar a los que tienen experiencia con JSON que clases usan en sus aplicaciones para el tratamiento de estos archivos.


Se que si usan Delphi 7 tienen que usar alguna librería de terceros, pero en las últimas versiones Delphi XE8 (que es la que utilizo) y posteriores ya existen units que manejan esto en el lenguaje.


Lo que no se es que tan recomendable es utilizar lo que ya tiene el lenguaje en lugar de unas de terceros. He leído en otros post que son del año pasado si mal no recuerdo que recomiendan utilizar SuperObject como librerías, pero el tema es que las mismas las he visto en GitHub y no se actualizan hace varios años. Si fuera el caso que voy por estas no tendría problemas en tomarlas y ver de actualizarlas o hacer una bifurcación.


Espero sus comentarios y muchas gracias.


Saludos,
El Rayo

newtron 24-04-2020 18:50:35

Buenas.


Yo he tenido recientemente que buscar algo para "descifrar" mensajes JSON y di con esto. No sé exactamente si es lo que buscas pero es una unidad que maneja este tipo de mensajes sin demasiada dificultad.


Saludos

elrayo76 24-04-2020 20:45:14

Buenas Newtron,


Gracias, creo que ese que comentas lo había visto hace muchisimo solo de pasada pero nunca me lo guarde por si lo necesitaba. Podría servirme.


Lo que necesito es poder serializar y deserializar archivos JSON, nada mas que eso. Lo único que quiero es que no tenga problemas con estructuras complejas.


Por si a alguién le interesa encontré este sitio que se le carga todo el contenido del JSON y genera toda las unit con las clases necesarias para Delphi. Acá dejo la dirección: https://jsontodelphi.com/


Mi pregunta es la siguiente, estás clases tanto la que me pasaste como la que yo comente no se actualizan hace mucho una 2009 y otra 2013. Más allá de actualización por compatibilidad con RADs nuevos que pueda necesitar o por performance, ¿hay algo que diga que se tienen que actulizar por que se actualizó el estandar JSON?.



Saludos,
El Rayo

Casimiro Notevi 24-04-2020 22:46:21

El indicado por newtron funciona muy bien, lkjson.

El problema de esas clases que se crean desde sitios online como el que has indicado, es que no son compatibles con delphi 7, que es el que usas, sin con delphis modernos.

newtron 25-04-2020 09:51:29

Cita:

Empezado por elrayo76 (Mensaje 536846)
Buenas Newtron,


Gracias, creo que ese que comentas lo había visto hace muchisimo solo de pasada pero nunca me lo guarde por si lo necesitaba. Podría servirme.


Lo que necesito es poder serializar y deserializar archivos JSON, nada mas que eso. Lo único que quiero es que no tenga problemas con estructuras complejas.


Por si a alguién le interesa encontré este sitio que se le carga todo el contenido del JSON y genera toda las unit con las clases necesarias para Delphi. Acá dejo la dirección: https://jsontodelphi.com/


Mi pregunta es la siguiente, estás clases tanto la que me pasaste como la que yo comente no se actualizan hace mucho una 2009 y otra 2013. Más allá de actualización por compatibilidad con RADs nuevos que pueda necesitar o por performance, ¿hay algo que diga que se tienen que actulizar por que se actualizó el estandar JSON?.



Saludos,
El Rayo


Yo lo he implementado hace escasamente un mes en un Delphi2007 sin problemas pero te diría que debe de funcionar bien en cualquier delphi.


Saludos

xalo 25-04-2020 17:40:54

Yo te recomendaría mORMot. Esta es la parte donde explica el tema de tratamiento de json
Tiene un performance mejor incluso que el que viene integrado en Delphi. Sinó quieres usar o instalar todo el framework usa solo la unidad Syncommons.pas. Compila desde delphi 7 a 10.3 e incluso FPC.
La documentación es excelente.
Fíjate que fácil es crear un json y parsearlo con una de las diversas formas que tiene de hacerlo:
Código:

var V1: variant;
begin
  V1 := _Obj(['name','John','year',1972]);
 
  assert(VariantSaveJson(v1)='{"name":"John","year":1972}');
  assert(v1.name='John');
....


Neftali [Germán.Estévez] 27-04-2020 08:52:52

Yo mismo he usado lkJson bastante en versiones antiguas de delphi que no tenían soporte para JSON y funcionan muy boien.
Y también he visto algo de SuperObject, aunque no tanto y yambién va muy bien.

Pero creo que la mejor opción la has dicho tú mismo:


Cita:

Empezado por elrayo76 (Mensaje 536837)
Lo que no se es que tan recomendable es utilizar lo que ya tiene el lenguaje en lugar de unas de terceros.


Si tu versión de delphi lo soporta, yo personalmente no usuaría algo de terceros.
Salvo que hubiera alguna razón de peso (si la hay comentala).

WHILENOTEOF 27-04-2020 10:38:48

Yo utilizo estos https://github.com/ahausladen/JsonDataObjects , van muy bien, rápido y una elegante forma de acceder a los valores. Sobre la implementación que viene con Delphi, creo que en las últimas versiones ha mejorado el rendimiento, pero como suele pasarle a Embarcadero lo primero que sacó faltaba mucho por pulir.

oscorm 27-04-2020 15:32:23

Yo uso https://www.winsoft.sk/json.htm y va de p.m. incluso con Delphi 6, 0 problemas y una excelente implementación.

WHILENOTEOF 27-04-2020 15:37:48

Cita:

Empezado por oscorm (Mensaje 536902)
Yo uso https://www.winsoft.sk/json.htm y va de p.m. incluso con Delphi 6, 0 problemas y una excelente implementación.

No los he probado, pero siendo de pago y viendo como implementan la asignación de los diferentes valores (en el ejemplo de la web), me quedo con https://github.com/ahausladen/JsonDataObjects .

elrayo76 27-04-2020 16:59:34

Buenas,
Gracias a todos por sus recomendaciones. Ire viendo cada uno y dediciré con cual me quedo.
Al parecer no recomiendan usar lo que viene con el lenguaje.

Saludos,
El Rayo

Neftali [Germán.Estévez] 27-04-2020 17:04:10

Cita:

Empezado por elrayo76 (Mensaje 536907)
Al parecer no recomiendan usar lo que viene con el lenguaje.


Yo si. ^\||/^\||/^\||/

elrayo76 27-04-2020 17:34:27

Neftali, yo creía que no era recomendable usar los que tiene Delphi, ya que los mismos pueden no estar actualizados como indica las especificaciones JSON (esto se puede deber a que se hicieron modificaciones yal no salir versión nueva de Embarcadero estos no estaran actualizados).


Por otro lado pensaba en hacer compatibilidad con proyectos mas viejos que no están migrados a versiones donde tienen JSON nativo, ya que tengo un especie de framework que comprarten. Igual como creo que por el momento no usaran JSON pondre una directiva para identificar desde que versión de Delphi tiene que habilitarse y listo.


Otra cosa que quiero comentar es que desde hace un tiempo con la última versión de Firefox empezó el foro a dejar mas espacios de lo normal, aunque entre párrafo y párrafo dejo un solo espacio. Lo comento porque vi que editaste mi anterior comentario.



Saludos,
El Rayo

Casimiro Notevi 27-04-2020 18:07:09

Cita:

Empezado por elrayo76 (Mensaje 536909)
Otra cosa que quiero comentar es que desde hace un tiempo con la última versión de Firefox empezó el foro a dejar mas espacios de lo normal, aunque entre párrafo y párrafo dejo un solo espacio. Lo comento porque vi que editaste mi anterior comentario.

Ocurre con cualquier navegador, a ver si encontramos el problema :)

WHILENOTEOF 27-04-2020 18:39:27

Bueno, sobre usar o no el que viene con el lenguaje, para mi depende (como todo) de para que lo utilices, si el json no es muy grande (no te preocupan los problemas de rendimiento) puede ser una opción. Yo aparte de la performance, me gusta la notación para establecer o modificar valores.

Neftali [Germán.Estévez] 28-04-2020 09:27:41

Cita:

Empezado por elrayo76 (Mensaje 536909)
Neftali, yo creía que no era recomendable usar los que tiene Delphi, ya que los mismos pueden no estar actualizados como indica las especificaciones JSON (esto se puede deber a que se hicieron modificaciones yal no salir versión nueva de Embarcadero estos no estaran actualizados).

Tal vez eso fuera cierto en las primeras versiones donde Delphi implementó JSON (y de eso hace mucho tiempo y unas cuantas versiones), a día de hoy y en las últimas versiones que yo sepa no hay nada incorrecto.
Que yo sepa a día de hoy no hay problemas con la implementación de JSON en Delphi.

Cita:

Empezado por WHILENOTEOF (Mensaje 536915)
Bueno, sobre usar o no el que viene con el lenguaje, para mi depende (como todo) de para que lo utilices, si el json no es muy grande (no te preocupan los problemas de rendimiento) puede ser una opción. Yo aparte de la performance, me gusta la notación para establecer o modificar valores.

Mi opinión coincide con lo que comenta [WHILENOTEOF]. Tal vez exista alguna diferencia en cuanto a rendimiento con otros componentes comentados antes (no lo puedo ni asegurar ni desmentir). En el caso de que el rendimiento fuera algo "prioritario" o muy importante en la aplicación y teniendo la seguridad de que un paquete externo mejora mucho ese aspecto, sí que sería una opción para usarlo, pero en condiciones normales yo no lo haría.

Cita:

Empezado por elrayo76 (Mensaje 536909)
Otra cosa que quiero comentar es que desde hace un tiempo con la última versión de Firefox empezó el foro a dejar mas espacios de lo normal, aunque entre párrafo y párrafo dejo un solo espacio. Lo comento porque vi que editaste mi anterior comentario.

Como ha dicho [casimiro], lo tenemos "detectado".

gatosoft 28-04-2020 18:51:27

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 536908)
Yo si. ^\||/^\||/^\||/

Yo también.. Es cierto que en las ultimas versiones han mejorado el soporte. Tan solo de Berlin a Rio, han tenido una muy buena transformación, debido a la evolución que ha tenido RAD Server.

Por mi parte sugiero utilizar helpers como los que vienen con DMVC Framework, que ayuda a la serialización de objetos Delphi, Datasets, y muchas otras estrcutras.

Tambien, mORMot tiene sus librerias asociadas.

Por el lado de SuperObject, tenía entendido que ya no tenia su soporte original, y ha sido adoptado y ha tenido forks de usuarios en la red. Pero no lo recomendaría... considero que es mejor usar la funcionalidad nativa y ayudarse pro librerias o helpers que tengan buen soporte y buena perspectiva para el futuro.


La franja horaria es GMT +2. Ahora son las 11:46:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi