Bibliotecas: Serialização e desserialização de JSON (MQL nativo) - 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);


// no escapamento - { a: [ [1], [2,3] ]; }
 
o_o:

Parece claro, mas não consigo entender algo... Por exemplo, uma tarefa prática simples: copiamos os gráficos e criamos um array de arrays com 3 gráficos em cada um, com os campos "symbol" e"period".

Ou seja, como resultado, devemos obter o seguinte: { "keyboard": [ [ [ [{"symbol":USDJPY, "period":5},{"symbol":AUDUSD, "period":5},{"symbol":EURUSD, "period":5}], [{"symbol":GBPUSD, "period":5},{"symbol":NZDUSD, "period":5},{"symbol":EURJPY, "period":5}] } ] }

O número de elementos na matriz aninhada pode ser configurado por meio de uma variável.

 
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);


Você realmente não tem certeza ou tem preguiça de codificar por conta própria? )

 
o_o:


Você realmente não tem certeza ou tem preguiça de codificar por conta própria? )


Não, Alexey, não tenho preguiça de programar. A questão é diferente: todos os seus exemplos têm um número fixo de itens de matriz. Aqui está meu código, que infelizmente não funciona. Não consigo entender qual é o erro. (((

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

   //--- Determinar o número de elementos transmitidos
   int count = ArraySize(array_value);
   if(count == 0) return(j_keyboard.Serialize()); // Nenhum elemento

   int col = 0;
   for(int item = 0; item<count; item++)
      {
         //--- Preenchendo o elemento mais simples
         j_item["text"] = array_value[item];
         
         if(col<columns) // Se o número for menor que as colunas especificadas, adicione ao array
            {
               j_array.Add(j_item);
            }
         else
            {   
               
               // Alcance o número especificado de colunas e adicione-as à matriz principal
               j_keyboard["keyboard"].Add(j_array);
               col = 0;
               j_array.Clear(); // Limpar matriz aninhada
            }
      }
   
   Print(j_keyboard.Serialize());
array_value - Это строчный массив переданных элементов
 
Алексей Барбашин:

Aqui está meu código, que infelizmente não funciona.

Como você percebeu que ele não funcionou?

 
o_o:

Como você percebeu que não estava funcionando?


A string de serialização gera um objeto vazio. Vou criar um script e carregá-lo aqui.

.... depois de um tempo...

Alexey, desculpe-me, fiz besteira... Não adicionei o incremento do iterador... (((

Tudo funciona. Isso é o que significa conversar com uma pessoa inteligente! ))) Mais uma vez, obrigado por seu desenvolvimento, que estou usando há quase um ano!

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

A string de serialização gera um objeto vazio. Vou criar um script e publicá-lo aqui.

Ele funciona para mim.

#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(); // Nenhum elemento
        
        CJAVal ja;    // Matriz aninhada 
        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); // adicionar
        }
        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"}]]}


O que há de errado com seu código?

 
o_o:

Funciona para mim.


O que há de errado com seu código?


Respondido acima, encontrei meu erro. Obrigado! )))

 

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

Está funcionando. Isso é o que significa conversar com uma pessoa inteligente! )))

há uma depuração para tudo. é muito mais inteligente ))

Mais uma vez, obrigado pelo seu desenvolvimento, que estou usando há quase um ano!

De nada

 

O resultado do WebRequest é uma matriz e eu o invoco da seguinte forma

jv.Deserialize( result);


como posso iterá-lo?