在 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.
它可能对你有用。
我需要从 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.
它可能对你有用。