程序库: JSON Serialization and Deserialization (native MQL)

 

JSON Serialization and Deserialization (native MQL):

JSON 协议序列化和逆序列化。代码从高速的 С++ 程序库移植而来。

实践例程: 在网站上授权并解析响应

CJAVal jv;
jv["login"]="Login"; // 登录名
jv["password"]="Pass"; // 口令

//--- 字符串序列化  {"login":"Login","password":"Pass"}
char data[]; 
ArrayResize(data, StringToCharArray(jv.Serialize(), data, 0, WHOLE_ARRAY)-1);

//--- 发送数据
char res_data[];
string res_headers=NULL;
int r=WebRequest("POST", "http://my.site.com/Authorize", "Content-Type: text/plain\r\n", 5000, data, res_data, res_headers);

//--- 假设应答 {"accessToken":"ABRAKADABRA","session_id":124521}
//--- 获取访问令牌
jv.Deserialize(res_data);
string AccessToken=jv["accessToken"].ToStr();

作者: o_O

 

the WebRequest  result is a array. and i invoke like this 

 jv.Deserialize( result); 


how can i iterate  it

 

awesome,I have added ulong and datetime type support to it.

 
Ting Yu:

the WebRequest  result is a array. and i invoke like this 

 jv.Deserialize( result); 


how can i iterate  it

if result likes
[{"a":1},{"a":2}]

'

you can use jv[0]["a"].ToInt() to get 1,jv[1]["a"].ToInt() to get 2

 

array out of range in 'jAson.mqh' (330,22)   报错了 


位置在:


case '{': // начало объекта. создаем объект и забираем его из js

i0=i+1;

if (m_type!=jtUNDEF) { Print(m_key+" "+string(__LINE__)); return false; }// ошибка типа

m_type=jtOBJ; // задали тип значения

i++; if (!Deserialize(js, slen, i)) { Print(m_key+" "+string(__LINE__)); return false; } // вытягиваем его

return js[i]=='}' || js[i]==0;  // 这里异常了  ,请问如何解决

break;


谢谢 

2823500551@qq.com

 
怎么操作泛型序列化与反序列化?
原因: