Обработка строки json в mql5
Я получил следующую строку:
{'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, так как ни одна библиотека не достаточно эффективна, чтобы помочь.
Я готов получить вывод как:
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 ответ
Вы можете использовать как можно больше "нативных" решений. Это должно быть хорошо для вас, но имейте в виду, что он не обрабатывает 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);
}