Обработка строки json в mql5 - PullRequest
0 голосов
/ 15 ноября 2018

Я получил следующую строку:

{'1.128330': {'sell': {'id': '1', 'got': 93.03059560034244}, 'buying': {'id': '2', 'got': 80.29916788508336}}, '1.128520': {'sell': {'id': '1', 'got': 16.857589570319895}, 'buying': {'id': '2', 'got': 225.53801097382126}}, '1.128480': {'sell': {'id': '1', 'got': 25.107832004252355}, 'buying': {'id': '2', 'got': 173.6565182150294}}, '1.128600': {'sell': {'id': '1', 'got': 5.970539130416359}, 'buying': {'id': '2', 'got': 361.9910279494408}}, '1.128640': {'sell': {'id': '1', 'got': 2.5341625886266863}, 'buying': {'id': '2', 'got': 393.3836268867237}}, '1.128020': {'sell': {'id': '1', 'got': 428.3577531480875}, 'buying': {'id': '2', 'got': None}}}

Я не понимаю, как я могу обрабатывать и отделять значения json в mql5, поскольку ни одна библиотека не достаточно эффективна, чтобы помочь.
IЯ хочу получить вывод:

price[] = {1.128330,1.128520,1.128480,1.128600,1.128640,1.128020}
whatdo[] = {1,2,1,2,1,2,1,2,1,2,1,2}
gain[] = {93.03059560034244,80.29916788508336,16.857589570319895,225.53801097382126,25.107832004252355,173.6565182150294,5.970539130416359,361.9910279494408,2.5341625886266863,393.3836268867237,428.3577531480875,0}

Пожалуйста, дайте мне знать, что я могу сделать.

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете использовать как можно больше «нативных» решений. Этот должен быть хорош для вас, но имейте в виду, что он не обрабатывает json-массивы, вы должны перебирать элементы массива. Вот ссылка с примером

На вашем месте я бы написал вот такой код:

 #include <jason.mqh>
 string receivedJson="{'1.128330': {'sell': {'id': '1', 'got': 93.03059560034244}, 'buying': {'id': '2', 'got': 80.29916788508336}}, '1.128520': {'sell': {'id': '1', 'got': 16.857589570319895}, 'buying': {'id': '2', 'got': 225.53801097382126}}, '1.128480': {'sell': {'id': '1', 'got': 25.107832004252355}, 'buying': {'id': '2', 'got': 173.6565182150294}}, '1.128600': {'sell': {'id': '1', 'got': 5.970539130416359}, 'buying': {'id': '2', 'got': 361.9910279494408}}, '1.128640': {'sell': {'id': '1', 'got': 2.5341625886266863}, 'buying': {'id': '2', 'got': 393.3836268867237}}, '1.128020': {'sell': {'id': '1', 'got': 428.3577531480875}, 'buying': {'id': '2', 'got': None}}}"

 double price[], gain[]; int what2do[];
 if(!processJson(receivedJson))print("error");

 boolean processJson(string inputJson,double &price[],double &gain[],int what2do[])
   {
    CJAVAL json(NULL, jtUNDEF);
    if(!json.Deserialize(inputJson))
        return(false);
    if(ArrayResize(price,json.m_e)==-1 || ArrayResize(gain,json.m_e)==-1 || ArrayResize(what2do,json.m_e)==-1)
        return(false);
    const string sell="sell", buy="buy", got="got", none="None";
    for(int i=0;i<json.m_e;i++)
      {
       price[i]=(double)json.m_e[i].m_key.ToDouble();
       for(int int j=0;j<json.m_e[i].m_e;j++)
         {
          string cmd=(int)json.m_e[i].m_e[j];
          what2do[i]=(cmd==sell ? 2 : (cmd==buy ? 1 : 0) );
          string gain=json.m_e[i].m_e[j][got];
          gain[i]=gain==none ? INT_MIN : DoubleToString(gain);
         }
      }
    return(true);
   }
...