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

 
JAval j1; j1.Add(1);

JAval j2; j2.Add(2); j2.Add(3);

JAval js;

js["a"].Add(j1);
js["a"].Add(j2);


// en el escape - { a: [ [1], [2,3] ]; }
 
o_o:

Parece claro, pero no consigo entender algo... Por ejemplo, un trabajo práctico sencillo: copiamos los gráficos y hacemos un array de arrays con 3 gráficos en cada uno, con los campos "símbolo" y"periodo".

Es decir, como resultado deberíamos obtener lo siguiente: { "keyboard": [ [ [{"símbolo":USDJPY, "periodo":5},{"símbolo":AUDUSD, "periodo":5},{"símbolo":EURUSD, "periodo":5}], [{"símbolo":GBPUSD, "periodo":5},{"símbolo":NZDUSD, "periodo":5},{"símbolo":EURJPY, "periodo":5}] } ] }

El número de elementos de la matriz anidada puede configurarse mediante una variable.

 
JAval ja, je, js;

je["symbol"]="USDJPY"; je["period"]=5; ja.Add(je);
je["symbol"]="AUDUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="EURUSD"; je["period"]=5; ja.Add(je);

js["keyboard"].Add(ja);

ja.Clear();
je["symbol"]="GBPUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="NZDUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="EURJPY"; je["period"]=5; ja.Add(je);

js["keyboard"].Add(ja);


¿Realmente no lo tienes claro o simplemente te da pereza codificar tú mismo? )

 
o_o:


¿Realmente no lo tienes claro o simplemente te da pereza codificar tú mismo? )


No, Alexey, no soy demasiado vago para programar. La cuestión es otra: todos tus ejemplos tienen un número fijo de elementos de matriz. Aquí está mi código, que por desgracia no funciona. No puedo entender cuál es el error. (((

   CJAVal j_keyboard; // Matriz principal
   CJAVal j_array;    // Matriz anidada 
   CJAVal j_item;     // Elemento de matriz 

   //--- Determinar el número de elementos transmitidos
   int count = ArraySize(array_value);
   if(count == 0) return(j_keyboard.Serialize()); // No hay elementos

   int col = 0;
   for(int item = 0; item<count; item++)
      {
         //--- Rellenar el elemento más simple
         j_item["text"] = array_value[item];
         
         if(col<columns) // Si el número es menor que las columnas especificadas, añadir a la matriz
            {
               j_array.Add(j_item);
            }
         else
            {   
               
               // Alcanza el número especificado de columnas, añádelas al array principal
               j_keyboard["keyboard"].Add(j_array);
               col = 0;
               j_array.Clear(); // Borrar matriz anidada
            }
      }
   
   Print(j_keyboard.Serialize());
array_value - Это строчный массив переданных элементов
 
Алексей Барбашин:

Aquí está mi código, que por desgracia no funciona.

¿cómo te diste cuenta de que no funcionaba?

 
o_o:

¿cómo te diste cuenta de que no funcionaba?


La cadena de serialización produce un objeto vacío. Voy a hacer un script y subirlo aquí.

.... después de un rato...

Alexei, lo siento, metí la pata... No añadí el incremento del iterador.... (((

Todo funciona. ¡Es lo que tiene charlar con una persona inteligente! ))) ¡Gracias de nuevo por su desarrollo, que he estado utilizando durante casi un año!

Archivos adjuntos:
 
Алексей Барбашин:

La cadena de serialización produce un objeto vacío. Prepararé un script y lo publicaré aquí.

A mí me funciona.

#include <JAson.mqh>
//------------------------------------------------------------------ OnStart
void OnStart()
{
        string array_value[]={"000", "111", "012", "AAA", "BBB", "ABC"};
        Print(Get(array_value, 3));
}
//------------------------------------------------------------------ Get
string Get(string& array_value[], int columns)
{       
        CJAVal jk; // Matriz principal
        int n=ArraySize(array_value); if (n==0) return jk.Serialize(); // No hay elementos
        
        CJAVal ja;    // Matriz anidada 
        for(int i=0, c=0; i<n; i++, c++)
        {
                if (c>=columns) { jk["keyboard"].Add(ja); c=0; ja.Clear(); }
                CJAVal ji; ji["text"]=array_value[i]; ja.Add(ji); // añadir
        }
        if (ArraySize(ja.m_e)>0) jk["keyboard"].Add(ja);
        
        return jk.Serialize();
}

{"keyboard":[[{"text":"000"},{"text":"111"},{"text":"012"}],[{"text":"AAA"},{"text":"BBB"},{"text":"ABC"}]]}


¿Qué le pasa a tu código?

 
o_o:

A mí me funciona.


¿Qué le pasa a tu código?


Respondido arriba. Encontré mi error. Gracias. )))

 

Алексей Барбашин:

Está funcionando. ¡Eso es lo que significa charlar con una persona inteligente! )))

hay un debug para todo. es mucho mas inteligente ))

¡Gracias de nuevo por su desarrollo que he estado usando durante casi un año!

de nada

 

el resultado de WebRequest es un array. e invoco así

jv.Deserialize( resultado);


como puedo iterarlo