文章目錄
- 一、MQL語言實現JSON協議的意義
- 二、定義JSON數據枚舉類型
- 簡單數據類型
- 復雜數據類型
- 枚舉數據類型
- 定義類變量
- 清理與賦值方法
- 構造與析構方法
- 重載運算符
- 添加與設置方法
- 序列化與反序列方法
一、MQL語言實現JSON協議的意義
-
數據交互:JSON是一種輕量級的數據交換格式,廣泛應用于Web開發和API接口。通過在MQL語言中實現JSON協議,可以方便地與其他系統進行數據交互,例如獲取外部數據源的實時行情信息或將交易結果以JSON格式返回給其他系統。
-
數據解析:許多外部數據源或API接口返回的數據都是以JSON格式進行傳輸。通過在MQL語言中實現JSON協議,可以方便地解析和處理這些數據,提取所需的信息并進行相應的處理。
-
數據存儲:將數據以JSON格式進行存儲可以更加靈活和可擴展。通過在MQL語言中實現JSON協議,可以將交易記錄、策略參數等數據以JSON格式進行存儲,方便后續的讀取和處理。
總之,通過在MQL語言中實現JSON協議,可以實現與其他系統的數據交互、方便地解析外部數據和靈活存儲數據等功能,提高策略開發和交易執行的靈活性和效率。
二、定義JSON數據枚舉類型
簡單數據類型
- 字符串(string):由雙引號括起來的Unicode字符序列。
- 數字(number):整數或浮點數。
- 布爾值(boolean):true或false。
- 空(null):表示空值。
復雜數據類型
- 數組(Array):由方括號括起來的有序值的集合。
- 對象(Object):由花括號括起來的無序鍵值對的集合。
枚舉數據類型
//+------------------------------------------------------------------+
//| 枚舉 JSON 類型 |
//+------------------------------------------------------------------+
enum ENUM_JSON_TYPE
{JSON_TYPE_UNDEF, // 未定義類型JSON_TYPE_NULL, // 空值類型JSON_TYPE_BOOL, // 布爾類型JSON_TYPE_INT, // 整型類型JSON_TYPE_DBL, // 浮點類型JSON_TYPE_STR, // 字符串類型JSON_TYPE_ARRAY, // 數組類型JSON_TYPE_OBJ // 對象類型
};
定義類變量
//+------------------------------------------------------------------+
//| 類 CJAVal |
//+------------------------------------------------------------------+
class CJAVal
{public:CJAVal m_children[]; // 子節點數組string m_key; // 鍵名string l_key; // 保存反序列化鍵CJAVal *m_parent; // 父節點// 類型及對應的值ENUM_JSON_TYPE m_type; // 類型bool bool_v; // 布爾值long int_v; // 整型值double dbl_v; // 浮點值int dbl_precision; // 浮點值精度string str_v; // 字符串值static int code_page; // 代碼頁
};
清理與賦值方法
// 清理virtual void Clear(ENUM_JSON_TYPE jt=JSON_TYPE_UNDEF, bool save_key=false);// 復制virtual void CopyArr(const CJAVal &a);virtual void CopyData(const CJAVal &a);virtual bool Copy(const CJAVal &a);
構造與析構方法
// 構造函數CJAVal();CJAVal(CJAVal *parent, ENUM_JSON_TYPE type);CJAVal(ENUM_JSON_TYPE t, string str);CJAVal(const int v);CJAVal(const long v);CJAVal(const double v, int precision=-100);CJAVal(const bool v);CJAVal(const CJAVal &a);// 析構函數~CJAVal();
重載運算符
// 數組下標讀取virtual CJAVal *operator[](string key);virtual CJAVal *operator[](int i);// 重載 "=" 運算符void operator=(const CJAVal &a);void operator=(const int v);void operator=(const long v);void operator=(const double v);void operator=(const bool v);void operator=(string v);// 重載 "==" 運算符bool operator==(const int v) {return int_v == v; }bool operator==(const long v) { return int_v == v; }bool operator==(const double v) { return dbl_v == v; }bool operator==(const bool v) { return bool_v == v; }bool operator==(string v) { return str_v == v; }// 重載 "!=" 運算符bool operator!=(const int v) { return int_v != v; }bool operator!=(const long v) { return int_v != v; }bool operator!=(const double v) { return dbl_v != v; }bool operator!=(const bool v) { return bool_v != v; }bool operator!=(string v) { return str_v != v; }
添加與設置方法
// 設置方法virtual void Set(const CJAVal &a);virtual void Set(const CJAVal &list[]);// 添加方法virtual CJAVal *AddBase(const CJAVal &item);virtual CJAVal *Add(const CJAVal& item);virtual CJAVal *Add(const int v);virtual CJAVal *Add(const long v);virtual CJAVal *Add(const double v, int precision=-2);virtual CJAVal *Add(const bool v);virtual CJAVal *Add(string v);
序列化與反序列方法
// 序列化和反序列化virtual void Serialize(string &json, bool is_key=false, bool use_comma=false);virtual string Serialize();virtual bool Deserialize(char &json[], int len, int &i);virtual bool ExtrStr(char &json[], int len, int &i);virtual bool Deserialize(string json, int acp=CP_ACP);virtual bool Deserialize(char &json[], int acp=CP_ACP);