Библиотеки: JSON Serialization and Deserialization (native MQL) - страница 7

 
JAval j1; j1.Add(1);

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

JAval js;

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


// на выхлопе - { a: [ [1], [2,3] ]; }
 
o_o:

Так вроде понятно, но кое-что понять не могу... К примеру простая практическая задача: передираем графики и составляем массив массивов по 3 графика в каждом, с полями "symbol" и "period"

То есть в итоге должны получить следующее: { "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}] ] }

При этом количество элементов во вложенном массиве может настраиваться через переменную.

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


вам действительно непонятно или просто лень кодить самому? )

 
o_o:


вам действительно непонятно или просто лень кодить самому? )


Нет, Алексей, мне не лень кодить. Суть в другом: во всех Ваших примерах фиксированное количество заданных элементов массива. Вот мой код, который к сожалению не работает. В чем ошибка, понять не могу. (((

   CJAVal j_keyboard; // Основной массив
   CJAVal j_array;    // Вложенный массив  
   CJAVal j_item;     // Элемент массива  

   //--- Определяем количество переданных элементов
   int count = ArraySize(array_value);
   if(count == 0) return(j_keyboard.Serialize()); // Нет элементов

   int col = 0;
   for(int item = 0; item<count; item++)
      {
         //--- Заполняем простейший элемент
         j_item["text"] = array_value[item];
         
         if(col<columns) // Если количество меньше заданных колонок, добавляем в массив
            {
               j_array.Add(j_item);
            }
         else
            {   
               
               // Достигли заданного количества колонок, добавлем их в основной массив
               j_keyboard["keyboard"].Add(j_array);
               col = 0;
               j_array.Clear(); // Очищаем вложенный массив
            }
      }
   
   Print(j_keyboard.Serialize());
array_value - Это строчный массив переданных элементов
 
Алексей Барбашин:

Вот мой код, который к сожалению не работает.

как поняли, что он не работает?

 
o_o:

как поняли что не работает?


Строка сериализации выводит пустой объект. Сейчас срипт накидаю и скину сюда. 

.... спустя некоторое время...

Алексей, простите, это я лоханулся... не добавил увеличение итератора... (((

Все работает. Вот что значит просто пообщаться с умным человеком! ))) Спасибо еще раз за Вашу разработку, которой я пользуюсь уже почти год!

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

Строка сериализации выводит пустой объект. Сейчас срипт накидаю и скину сюда.

у меня работает

#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; // Основной массив
        int n=ArraySize(array_value); if (n==0) return jk.Serialize(); // Нет элементов
        
        CJAVal ja;    // Вложенный массив  
        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); // добавляем
        }
        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_o:

у меня работает


а что с вашим кодом не так?


Ответил выше. нашел свою ошибку. Спасибо! )))

 

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

Все работает. Вот что значит просто пообщаться с умным человеком! )))

есть же дебаг для всего. он намного умнее )

Спасибо еще раз за Вашу разработку, которой я пользуюсь уже почти год!

пожалуйста

 

Результат WebRequest представляет собой массив. и я вызываю его следующим образом

jv.Deserialize( result);


как мне его итерировать