Bibliotecas: JSON Serialization and Deserialization (native MQL) - página 14
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
La librería es muy útil. Pero me he encontrado con que al serializar valores de tipo double hay una fuerte pérdida de precisión.
Ejemplo:
double minutos_abiertos[] = {0.95347, 0.95317, 0.95324}
for (int i=0; i<ArraySize(minutos_abiertos); ++i) jv["minutos_abiertos"].Add(minutos_abiertos[i]);
Tras la serialización obtengo:
"minutes_open":[9.53e-01,9.53e-01,9.53e-01]
Es decir, simplemente se pierden los 2 últimos caracteres significativos y todos los valores del array pasan a ser simplemente iguales entre sí. Como resultado, todos los cálculos basados en estos datos van en vano....
Al final lo solucioné convirtiendo los valores del array en cadena.
Hola a todos
La documentación de la librería JAson no está completa en este sitio. Escribí documentación con más detalles y añadí pruebas unitarias: https://github.com/vivazzi/JAson. Puede ser útil para alguien.
Además, he creado una incidencia que describe un error en el uso de Json interno (objeto CJAVal): https://github.com/vivazzi/JAson/issues/1.
El objeto CJAVal no se asigna correctamente a otro objeto CJAVal como objeto:
Como solución, es necesario utilizar el método Set():
Si alguien puede ayudar, entonces muchos MQL-desarrolladores estarán agradecidos ya que este error ha existido durante muchos años.
¡¡¡Hola a todos!!!
La documentación de JAson no está completa en este sitio, así que escribí una documentación más detallada https://github.com/vivazzi/JAson/ y añadí pruebas unitarias: tal vez alguien la encuentre útil.
Y describí el problema de usar un Json anidado (objeto CJAVal): https://github.com/vivazzi/JAson/issues/1.
El objeto CJAVal no se guarda correctamente si se utiliza el signo "=" (se guarda la clave vacía):
Sí, en las pruebas adjuntas en la página de la librería en este sitio, se puede encontrar que es necesario utilizar el método Set():
Pero si alguien puede arreglar la librería para que sea posible guardar estructuras Json anidadas mediante el signo "=", ayudaría a mucha gente. Ya que he notado que algunas personas piensan que la librería tiene errores cuando intentan asignar un CJAVal anidado de la manera usual vía "=".
Espero que esto sea posible incluso dentro del lenguaje MQL. He intentado corregirlo yo mismo, pero no tengo un conocimiento profundo del lenguaje MQL, y hasta ahora no ha funcionado hacer la asignación vía "=".
¡Hola!
La documentación de la librería JAson no está completa en este sitio. Escribí documentación con más detalles y añadí pruebas unitarias: https://github.com/vivazzi/JAson. Puede ser útil para alguien.
Además, he creado una incidencia que describe un error en el uso de Json interno (objeto CJAVal): https://github.com/vivazzi/JAson/issues/1.
El objeto CJAVal no se asigna correctamente a otro objeto CJAVal como objeto:
Como solución, es necesario utilizar el método Set():
Si alguien puede ayudar, entonces muchos desarrolladores de MQL estarán agradecidos ya que este error ha existido durante muchos años.
El problema está en el método Copy.
La clave se sobrescribe con la clave del subobjeto en su ejemplo la "b" se sobrescribe con la clave de "nested_data" que está vacío.
He utilizado esta solución simple, no totalmente probado:
Gracias, Laszlo Tormasi - ¡tu corrección funciona y todas las pruebas han pasado!
He actualizado JAson con sus correcciones: https://github.com/vivazzi/JAson
El problema de la asignación de estructuras Json anidadas mediante el signo "=" ha sido resuelto por Laszlo Tormasi en el comentario https://www.mql5.com/en/forum/65320/page3#comment_21453129.
Versión JAson con edicionesen https://github.com/vivazzi/JAson.
¡Gracias a todos los que trataron de entender el problema y ayudar!
Se ha corregido un error ("array fuera de rango") que se producía con índices de array negativos. Ahora el operador [] devuelve NULL.
El procesamiento tiene este aspecto.
Además, añadí el método ToIntI por conveniencia. Ya que ToInt devuelve long.
No entiendo cómo leer el json anidado.
Aquí hay una cadena como esta:
string str= { "key1": [ { "key2": [ { "key3": "val)" }, {}, {} ] } ] }¿Cómo puedo leerlo y acceder a los elementos?
Por más que lo intento, no funciona.No entiendo cómo leer el json anidado.
Aquí hay una cadena como esta:
¿Cómo la leo y accedo a los elementos?
Por más que lo intento, no lo consigo.string str; CJAVal data; str= "{" " \"key1\": [" " {" " \"key2\": [" " {" " \"key3\": \"val)\"" " }," " {}," " {}" " ]" " }" " ]" "}"; data.Deserialize(str); Print(data["key1"][0]["key2"][0]["key3"].ToStr());Si no entiendes la estructura de tu cadena json o algo va mal, haz lo siguiente:
Para entender fácilmente la estructura de una cadena json utiliza este sitio: https: //jsoneditoronline.org/.