在 MQL4 脚本中管理 JSON 数组格式

Managing JSON Array format in MQL4 script

我需要从 JSON 数组中获取数据。
我使用调用 WebRequest() 函数从我的数据库中获取订单列表,通过 nodejs(api) 然后我得到以下 JSON-数据格式例如:

[{"orderid":       123556,
  "ordertype":     0,
  "ordercurrency": "EURUSD",
  "orderdt":       "2016-12-03 03:00:00"
  },
 {"orderid":       123457,
  "ordertype":     0,
  "ordercurrency": "GBPUSD",
  "orderdt":       "2016-12-03 03:15:00"
  }
 ]

知道如何将其转换为普通数组以便管理数据吗?

谢谢。

/库尔

怎么做?
简单:

JSON-格式是数据元素的“string-”表示,将放入一个通用容器中,无论是 uchar[] 还是 MQL4 端的 string

因此,让我们创建一个 JSON-解析器,与标准 JSON-格式语法规则的子集一致。

1) 搜索 所有 db-output "row"-s(封装在 {...} )

2) 解码 所有数据库输出“”-s(编码为(已知)"KEY":VALUE对)

3) 将解码值存储到任何类型的目标表示中,

int    orderIdNoARRAY[];
int    orderTypeARRAY[];
string orderCurrARRAY[];
string orderDateARRAY[];
int    anArrayStackPTR = 0
...
orderIdNoARRAY[anArrayStackPTR] = aDecodedOrderID;    // 123556
orderTypeARRAY[anArrayStackPTR] = aDecodedOrderTYPE;  // 0
orderCurrARRAY[anArrayStackPTR] = aDecodedOrderCURR;  // "EURUSD"
orderDateARRAY[anArrayStackPTR] = aDecodedOrderDATE;  // "2016-12-03 03:00:00"

#define oID   0
#define oTYPE 1
#define oCCY  2
#define oDATE 3

string stringDataFromJSON[10000,4];
int    anArrayStackPTR = 0
...
stringDataFromJSON[anArrayStackPTR,oID]   = (string)aDecodedOrderID;      // 123556
stringDataFromJSON[anArrayStackPTR,oTYPE] = (string)aDecodedOrderTYPE;    // 0
stringDataFromJSON[anArrayStackPTR,oCCY]  = (string)aDecodedOrderCURR;    // "EURUSD"
stringDataFromJSON[anArrayStackPTR,oDATE] = (string)aDecodedOrderDATE;    // "2016-12-03 03:00:00"

struct        aDB_RECORD{
       int    aDB_oID;
       int    aDB_oTYPE;
       string aDB_oCCY;
       string aDB_oDATE;
};

aDB_RECORD anArrayOfSTRUCTs[];
int    anArrayStackPTR = 0
...
anArrayOfSTRUCTs[anArrayStackPTR].aDB_oID   = aDecodedOrderID;    // 123556
anArrayOfSTRUCTs[anArrayStackPTR].aDB_oTYPE = aDecodedOrderTYPE;  // 0
anArrayOfSTRUCTs[anArrayStackPTR].aDB_oCCY  = aDecodedOrderCCY;   // "EURUSD"
anArrayOfSTRUCTs[anArrayStackPTR].aDB_oDATE = aDecodedOrderDATE;  // "2016-12-03 03:00:00"

是的,
就是这么简单!

JSON 序列化和反序列化库工作得很好。 您可以包含它并在一分钟内完成您的任务,或者从它的代码中获得灵感。

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

https://www.mql5.com/en/forum/65320

假设您将 JSON 数据粘贴到名为 data 的字符串变量中。

#include <JAson.mqh>

// Object
CJAVal json;

// Load in and deserialize the data
json.Deserialize(data);

// Try to access the data elements
Alert(json["orderid"].ToInt());
Alert(json["ordercurrency"].ToStr());

是的,JAson - JSON 序列化和反序列化库作品是很好的流行库: https://www.mql5.com/en/code/13663
https://www.mql5.com/en/forum/65320

我编写了包含更多细节的文档(不同于 https://www.mql5.com/en/code/13663)并添加了单元测试:
https://github.com/vivazzi/JAson.

它可能对你有用。