Discusión sobre el artículo "Dominando JSON: Crea tu propio lector JSON desde cero en MQL5"

 

Artículo publicado Dominando JSON: Crea tu propio lector JSON desde cero en MQL5:

Experimente una guía paso a paso sobre la creación de un analizador JSON personalizado en MQL5, completo con manejo de objetos y matrices, verificación de errores y serialización. Obtenga conocimientos prácticos para conectar su lógica comercial y sus datos estructurados con esta solución flexible para manejar JSON en MetaTrader 5.

En este artículo, pretendemos llenar ese vacío demostrando cómo crear su propio lector JSON en MQL5. A lo largo del camino, exploraremos los conceptos fundamentales del análisis de JSON y recorreremos la creación de una estructura de clase flexible capaz de manejar diferentes tipos de elementos JSON (como objetos, matrices, cadenas, números, valores booleanos y valores nulos). Nuestro objetivo final es permitirle analizar cómodamente cadenas JSON y acceder o modificar los datos dentro de ellas, todo desde la comodidad de su entorno MetaTrader 5.

Seguiremos una estructura similar a la que hemos visto en otros artículos relacionados con MQL5 pero con un enfoque específico en el análisis y uso de JSON. Este único artículo se dividirá en cinco secciones principales: una introducción (la que estás leyendo ahora), un análisis más profundo de los fundamentos de JSON y cómo encaja en MQL5, una guía paso a paso para construir un analizador JSON básico desde cero, una exploración de características avanzadas para el manejo de JSON y, finalmente, una lista de código completa más ideas finales.


Autor: Sahil Bagdi

 
Ah, hay otro. Creo que es el quinto.
Bueno, cuando lo tenga en mis manos, haré una comparativa.
 

He comparado la velocidad de 4 librerías, incluyendo ToyJson3 de MQL5Book. Como json de muestra tomé la respuesta de Binance a "exchangeInfo" con el tamaño de 768 Kb. Cuando la biblioteca lo lee de una cadena, se analiza en su totalidad, a continuación, selecciono un símbolo y leer todos sus datos. En un bucle 100 veces.

MetaTrader 5 x64 build 5370 started for MetaQuotes Ltd.
Windows 10 build 19045, 4 x AMD Ryzen 3 PRO 3200 GE w/ Radeon Vega, AVX2, 6 / 13 Gb memory, 241 / 427 Gb disk, UAC, GMT+3
cpu='AVX2 + FMA3'

Resultado (tiempo de procesamiento de la consulta):

99,5 ms - JAson 1.12(https://www.mql5.com/es/code/13663)

85,5 ms - JAson 1.13

46,9 ms - ToyJson3 (https://www.mql5.com/ru/forum/459079/page4#comment_57805801)

41 ms - JSON(https://www.mql5.com/es/code/53107)

1132 ms - JsonNode (esta biblioteca)

38 ms - mi implementación basada en JSON

PD: Érase una vez otra librería, muy simplificada, que parecía aparecer por aquí. Pero le he perdido la pista.

PPS: No publico el script para medirlo. El código está en una forma completamente antiestética.

 
Edgar Akhmadeev #:

He comparado la velocidad de 4 librerías, incluyendo ToyJson3 de MQL5Book. Como json de muestra tomé la respuesta de Binance a "exchangeInfo" con el tamaño de 768 Kb. Cuando la biblioteca lo lee de una cadena, se analiza en su totalidad, a continuación, selecciono un símbolo y leer todos sus datos. En un bucle 100 veces.

Resultado (tiempo de procesamiento de la consulta):

99,5 ms - JAson 1.12(https://www.mql5.com/es/code/13663)

85,5 ms - JAson 1.13

46,9 ms - ToyJson3 (https://www.mql5.com/ru/forum/459079/page4#comment_57805801)

41 ms - JSON(https://www.mql5.com/es/code/53107)

1132 ms - JsonNode (esta biblioteca)

38 ms - mi implementación basada en JSON

PD: Érase una vez otra librería, muy simplificada, que parecía aparecer por aquí. Pero le he perdido la pista.

PPS: No publico el script para medirlo. El código está en una forma completamente antiestético.

¿Podría publicar la cadena o archivo json por favor?
 
Alain Verleyen #:
¿Podría publicar la cadena o el archivo json, por favor?

https://fapi.binance.com/fapi/v1/exchangeInfo

https://eapi.binance.com/eapi/v1/exchangeInfo

778 KB (796.729 bytes).

 
Alain Verleyen #:
¿Podría publicar la cadena o el archivo json, por favor?
Aquí tiene una copia de la cadena obtenida mediante programación desde la API.
Archivos adjuntos: