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

 
o_o:

пофиксил

1.13

Попробуйте такой пример:

#include "JAson.mqh"

//+------------------------------------------------------------------+
void OnStart ()
{
  string in, out;
  CJAVal js (NULL, jtUNDEF);
  bool b;

  //---
  in =  "{\"фирма1\":{\"модельный_ряд1\":[[0.1,1.3],[0.2,1.5],[0.3,2.0]],\"модельный_ряд2\":[[0.1,2.3],[0.2,2.5],[0.3,3.0]]},\"фирма2\":{\"модельный_ряд1\":[[0.2,3.8],[0.3,4.0],[0.4,4.5]],\"модельный_ряд2\":[[0.2,4.8],[0.3,5.0],[0.4,6.5]]}}}";
  Print(in);
  out = "";
  b = js.Deserialize (in);
  js.Serialize (out);
  Print (out);
  
  for (int i = 0; i < ArraySize (js.m_e); i++)
  {
    Print("---");
    Print(js.m_e[i].m_key);
    
    for (int i1 = 0; i1 < ArraySize (js.m_e [i].m_e); i1++)
    {
      Print("   : ", js.m_e[i].m_e[i1].m_key);
      
      for (int i2 = 0; i2 < ArraySize (js.m_e [i].m_e [i1]. m_e); i2++)
      {
        Print("      : ", js.m_e[i].m_e[i1].m_e[i2].m_key, " :", js.m_e[i].m_e[i1].m_e[i2].ToDbl());
      }
    }
  }
}
//+------------------------------------------------------------------+
 
Delta.800:

"Потом скормите строку в парсер." - это так?  dataM.Deserialize(ttt);

"Заполните свою структуру данными парсера." - а как это сделать? чиркните строчку плиз... (структуру описывать не нужно))

Посмотрите в моём примере про фирмы и модельный ряд - там показано как получить данные из парсера....


o_o:

пофиксил

1.13

Однако..... Разбирает и собирает сроку замечательно, только вот получить данные не получается.... может быть ну их нафиг даблы, инты и прочее? - оставить строку как есть в виде string а снаружи уж порешается как быть с этой строкой.

 
Andrey Dik:

Однако..... Разбирает и собирает сроку замечательно, только вот получить данные не получается.... может быть ну их нафиг даблы, инты и прочее? - оставить строку как есть в виде string а снаружи уж порешается как быть с этой строкой.

у вас же массив в массиве. значит надо еще уровень цикла добавить i3

модельный_ряд1 :[ [0.1,1.3], [0.2,1.5], [0.3,2.0] ]
#include <JAson.mqh>

//+------------------------------------------------------------------+
void OnStart ()
{
  string in, out;
  CJAVal js (NULL, jtUNDEF);
  bool b;

  //---
  in =  "{\"фирма1\":{\"модельный_ряд1\":[[0.1,1.3],[0.2,1.5],[0.3,2.0]],\"модельный_ряд2\":[[0.1,2.3],[0.2,2.5],[0.3,3.0]]},\"фирма2\":{\"модельный_ряд1\":[[0.2,3.8],[0.3,4.0],[0.4,4.5]],\"модельный_ряд2\":[[0.2,4.8],[0.3,5.0],[0.4,6.5]]}}}";
  Print(in);
  out = "";
  b = js.Deserialize (in);
  js.Serialize (out);
  Print (out);
  
  for (int i = 0; i < ArraySize (js.m_e); i++)
  {
    Print("---");
    Print(js.m_e[i].m_key);
    
    for (int i1 = 0; i1 < ArraySize (js.m_e [i].m_e); i1++)
    {
      CJAVal* j1=GetPointer(js.m_e[i].m_e[i1]);
      Print("   : ", j1.m_key);
      
      for (int i2 = 0; i2 < ArraySize (j1. m_e); i2++)
      {
        CJAVal* j2=GetPointer(j1.m_e[i2]);
        for (int i3 = 0; i3 < ArraySize (j2. m_e); i3++)
        {
           CJAVal* j3=GetPointer(j2.m_e[i3]);
           Print("         : ", j3.m_key, " :", j3.ToDbl());
        }
      }
    }
  }
}
 

ОГРОМНОЕ СПАСИБО, всем откликнувшимся!!!

{
  "server_time": 1519120845,
  "pairs": {
    "btc_usd": {
      "decimal_places": 3,
      "min_price": 0.1,
      "max_price": 500000,
      "min_amount": 0.001,
      "hidden": 0,
      "fee": 0.2
    },
    "btc_rur": {
      ...
    },
    "btc_eur": {
      ...

получаем названия пар:

CJAVal dataM;
...
dataM.Deserialize(ttt);   
Print(dataM.m_e[0].m_key);
Print(dataM.m_e[1].m_key);
for (int i1 = 0; i1 < ArraySize (dataM.m_e [1].m_e); i1++)
  {
    CJAVal* j1=GetPointer(dataM.m_e[1].m_e[i1]);
    Print("   :-", j1.m_key);
  }

в итоге:

server_time
pairs
:-btc_usd
:-btc_rur
:-btc_eur
:-ltc_btc
...

то, что требовалось!

 
o_o:

у вас же массив в массиве. значит надо еще уровень цикла добавить i3

колдунство, 82 левл.

а попроще никак нельзе?

 
Andrey Dik:

колдунство, 82 левл.

а попроще никак нельзе?

в смысле?  сами же такие глубины массивов сделали.

 
o_o:

в смысле?  сами же такие глубины массивов сделали.

я сделал? - нет, моя фантазия так далеко не залетает, но это конкретный пример из жизни, так сказать.

имел ввиду - нельзя обойтись без указателей и мозголомных конструкций? как то проще хочется (про сам код библиотеки скромно умолчу вообще).

 
Andrey Dik:

я сделал? - нет, моя фантазия так далеко не залетает, но это конкретный пример из жизни, так сказать.

имел ввиду - нельзя обойтись без указателей и мозголомных конструкций?

где обойтись? что конкретно надо? выводить в лог кусок json? кнопку "хочу бабла" ? 

 
o_o:

где обойтись? что конкретно надо? выводить в лог кусок json? кнопку "хочу бабла" ? 

вот об этом:

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

как вообще можно догадаться, не зная кода библиотеки, что это и почему это нужно сделать что бы получить желаемое?! должны быть функции вроде тех же ToDbl() для простого доступа к данным.

как вижу - не я один такой "недогадливый"

зы. например, m_e - что это за жесть вообще? нельзя было назвать, к примеру, group? или m_key? - ну это же ни что иное как groupName! ну что, намного больше букаф стало? - нет, зато гораздо понятнее.

Итог: библиотека очень мощная и творит чудеса, но написана на "сухом языке" и слабонервным, кормящим женщинам и детям в код лучше не смотреть...

 
Andrey Dik:

вот об этом:

как вообще можно догадаться, не зная кода библиотеки, что это и почему это нужно сделать что бы получить желаемое?! должны быть функции вроде тех же ToDbl() для простого доступа к данным.

как вижу - не я один такой "недогадливый"

зы. например, m_e - что это за жесть вообще? нельзя было назвать, к примеру, group? или m_key? - ну это же ни что иное как groupName! ну что, намного больше букаф стало? - нет, зато гораздо понятнее.

Итог: библиотека очень мощная и творит чудеса, но написана на "сухом языке" и слабонервным, кормящим женщинам и детям в код лучше не смотреть...

может быть, Вам попробовать другую библиотеку?

я раньше ее использовал, но на MQL5 у меня (старая версия) не скомпилялась... нужно адаптировать... или попробовать новую версию...

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

тут на форуме где-то было про нее...

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

вот, нашел...

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

Причина обращения: