Bibliotecas: JSON Serialization and Deserialization (native MQL) - página 11

 
o_o:

¿Qué quieres decir? Tú mismo hiciste esas profundidades de matriz.

¿Las hice yo? - No, mi imaginación no llega tan lejos, pero este es un ejemplo concreto de la vida, por así decirlo.

Quise decir - ¿no podemos prescindir de punteros y construcciones sesudas? Me gustaría mantenerlo simple (modestamente guardaré silencio sobre el código de la biblioteca en sí).

 
Andrey Dik:

¿Ah, sí? - No, mi imaginación no llega tan lejos, pero este es un ejemplo concreto de la vida, por así decirlo.

Me refería a si no puedes prescindir de punteros y construcciones sesudas.

¿Dónde quieres prescindir de punteros? ¿Qué quieres exactamente? ¿Un trozo de json en el registro? ¿Un botón de "quiero dinero"?

 
o_o:

¿Qué necesitas exactamente? ¿Un trozo de json en el registro? ¿Un botón de "quiero dinero"?

de eso se trata

CJAVal* j1=GetPointer(js.m_e[i].m_e[i1]);

¿cómo puedes adivinar sin conocer el código de la librería qué es y por qué se debe hacer para conseguir lo que quieres? deberían existir funciones como ToDbl() para acceder a los datos de forma sencilla.

Como veo, no soy el único que está tan "despistado".

ss. p.ej. m_e - ¿qué es esta cosita? ¿no podría llamarse, por ejemplo, group? o m_key? - Pues no es más que groupName ¿Es mucho más letras? - No, pero mucho más claro.

Conclusión: la librería es muy potente y hace maravillas, pero está escrita en "lenguaje seco" y es mejor no mirar el código para pusilánimes, mujeres lactantes y niños....

 
Andrey Dik:

de eso se trata:

¿cómo puede uno adivinar sin conocer el código de la biblioteca qué es y por qué debe hacerse para conseguir lo que quiere? debería haber funciones como ToDbl() para el acceso simple a los datos.

Como veo, no soy el único que está tan "despistado".

ss. p.ej. m_e - ¿qué es esta cosita? ¿no podría llamarse, por ejemplo, group? o m_key? - Pues no es más que groupName! ¿Es mucho más letras? - No, pero es mucho más claro.

En resumen: la librería es muy potente y hace maravillas, pero está escrita en "lenguaje seco" y es mejor no mirar el código para pusilánimes, mujeres lactantes y niños....

¿Quizás deberías probar con otra librería?

Yo la usaba antes, pero no compilaba en MQL5 (versión antigua).... necesitas adaptarla... o probar una nueva versión...

http://www.lordy.co.nf/mql4/

había en algún lugar en el foro al respecto ...

---------------------

aquí está...

https://www.mql5.com/en/code/11134

 
Andrey Dik:

de eso se trata:

¿cómo puede uno adivinar, sin conocer el código de la biblioteca, qué es y por qué debe hacerse para conseguir lo que quiere? debería haber funciones como ToDbl() para el acceso simple a los datos.

Como veo, no soy el único que está tan "despistado".

ss. p.ej. m_e - ¿qué es esta cosita? ¿no podría llamarse, por ejemplo, group? o m_key? - Pues no es más que groupName! ¿Es mucho más letras? - No, pero es mucho más claro.

En resumen: la biblioteca es muy potente y hace maravillas, pero está escrita en "lenguaje seco" y es mejor no mirar el código para los pusilánimes, las mujeres lactantes y los niños....

Entonces, ¿quién te obligó a entrar en el array m_e?

No sé qué quieres del código. Y no sé qué tipo de tarea estás desarrollando.

---

En primer lugar, json es un formato de transferencia de datos, de estructura. Si no entiendes la estructura de los datos recibidos, no es problema de mis clases, es tuyo. Ir a la documentación de su fuente de datos y buscar la comprensión allí.

En segundo lugar - la clase implementa las funciones básicas de trabajar con el formato - serialización, almacenamiento de la estructura y manejo conveniente

Si quisieras obtener datos de un cierto array, escribirías código conveniente.

Print( js["фирма1"]["модельный_ряд1"][0][0].TODbl() );

y no esa larga mierda en forma de bucles para recuperar toda la estructura. No sé de qué iba todo eso.

 
Delta.800:

tal vez deberías probar con otra biblioteca.

Yo solia usarla antes, pero no compilaba en MQL5 para mi (version vieja)... necesitas adaptarla... o probar una nueva versión...

http://www.lordy.co.nf/mql4/

había en alguna parte en el foro al respecto....

---------------------

aquí está...

https://www.mql5.com/en/code/11134

Gracias, pero confío plenamente en el código de Sergeyev.

He sido tonto con los punteros, claro, pido disculpas. Difícil de leer - fii, qué problema...

 

o_o:

Print( js["фирма1"]["модельный_ряд1"][0][0].TODbl() );

y no esa larga mierda en forma de bucles a través de toda la estructura. No sé de qué iba todo eso.

por nombre de grupo los datos pueden no existir, o el grupo no está completo, o el nombre del grupo no está en los datos, o alguna otra cosa... ¿cómo entonces?

Así es más fácil y claro y siempre puedes comprobar el tamaño de los arrays para no tener problemas de llenado de las estructuras:

js.group [счетчикФирм].group [счетчикМодельногоРяда].group [счетчикМоделей].group [счетчикМодельВизОбъем].ToDbl ());

 

en tales variantes no está claro qué hacer con un elemento inexistente

así

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

de esta forma

js.group [countFirms].group [countModelRow].group [countModels].group [countModelVolume].ToDbl ());


si js["empresa1"] o js.group [contadorEmpresas] no aparece, ¿qué mostrar? y ¿si mostrar algo?

en este punto se accederá al elemento null y se producirá un error....

 
o_o:

en tales variantes no está claro qué hacer con un elemento inexistente

así

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

de esta forma

js.group [countFirms].group [countModelRow].group [countModels].group [countModelVolume].ToDbl ());


si js["empresa1"] o js.group [contadorEmpresas] no aparece, ¿qué mostrar? y ¿si mostrar algo?

en este punto será una referencia a elemento nulo y un error...

En una tienda hay estanterías, para cada género y autor hay una estantería y estantes diferentes (estructura/s con las que trabaja el programa). Y hay libros (datos) que pueden llegar o no a la tienda.....

¿Y cada vez que hay que rediseñar las estanterías para una nueva llegada de libros? Por supuesto que no.

Para abordar de esta manera:

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

necesita saber el nombre del grupo, y si el grupo en los datos de entrada está ahí, pero el nombre no está allí? Y si ..... pueden pasar muchas cosas...

Es más fácil simplemente comprobar el tamaño de los grupos de los datos y su número, eso es todo, si al menos un tamaño no coincide con nuestras estructuras, entonces los datos están rotos y no tiene sentido juguetear con ellos y averiguar qué es exactamente lo que está roto en ellos, simplemente ignorar el paquete de estos datos y eso es todo. No hay problemas con el acceso a celdas de array inexistentes (o vacías) y no hay incertidumbre sobre la corrección de los datos llegados. Y el programa nunca se bloqueará por alguna razón.

[Eliminado]  

¿Podría alguien o el autor responder si se supone que esto soporta JSON anidado? Es decir, una instancia CJAVal contiene las claves '2', y '3' que son otra instancia CJAVal. El código parece funcionar pero cuando se serializa las claves están en blanco.

Ejemplo, estoy recibiendo:

{"":{"sl":5270.98000000,"tp":5285.26000000,"order":2},"":{"sl":5274.80000000,"tp":5289.06000000,"order":3}}

Pero debería obtener

{"2":{"sl":5270.98000000,"tp":5285.26000000,"order":2},"3":{"sl":5274.80000000,"tp":5289.06000000,"order":3}}