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

 
danielsokolowsk:

有谁或作者能回答这是否应该支持嵌套 JSON?也就是说,一个 CJAVal 实例包含一个键 "2 "和 "3",它们是另一个 CJAVal 实例。代码似乎可以运行,但在序列化时,键是空白的。

例如,我得到


但应该得到

https://www.mql5.com/ru/forum/63015

几个示例

   string a[] = {"1", "2", "3"};
   int b[] = {1, 2, 3};
   
   CJAVal js;
   js["a"].Add(a[0]);
   js["a"].Add(a[1]);
   js["a"].Add(a[2]);
        
   js["b"].Add(b[0]);
   js["b"].Add(b[1]);
   js["b"].Add(b[2]);
   
   js["c"][0]=1.1;
   js["c"][1]=2.9;
   js["c"][2]=3.03;
   
   string t=js.Serialize();
   Print(t);   // {"a":["1","2","3"],"b":[1,2,3],"c":[1.10000000,2.90000000,3.03000000]} 
   
   
   js.Clear();
   js.Deserialize(t); 
   Print(js["c"][2].ToStr()); // 3.03000000

数组的数组

JAval j1; j1.Add(1);

JAval j2; j2.Add(2); j2.Add(3);

JAval js;

js["a"].Add(j1);
js["a"].Add(j2);

// { a:[ [1], [2,3] ]; }
Библиотеки: JSON Serialization and Deserialization (native MQL)
Библиотеки: JSON Serialization and Deserialization (native MQL)
  • 2015.08.18
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: JSON Serialization and Deserialization (native MQL)
 
很棒的设计,谢谢兄弟!用在我的机器人上,就像发条一样好用。
 
Konstantin Efremov:
很棒的设计,谢谢兄弟!工作起来就像发条一样,我把它用在了我的机器人上。

附件是修正版,感谢作者,也许他不会介意。

附加的文件:
json.mqh  44 kb
 

您好、


我想用这个库来读取 json 文件。


你能提供一个这样的例子吗?


我的第一行是 :

   string s[];
   int cpt=0;
   
   int handle=FileOpen("json_sample.txt",FILE_READ|FILE_TXT|FILE_ANSI);
   while(!FileIsEnding(handle)) {ArrayResize(s,ArraySize(s)+1); s[cpt++]=FileReadString(handle);}
   FileClose(handle);


为了把 json 文件中的一些值存储到我的变量中,我该怎么做?


感谢您的帮助!

Erwann.

 

经过一番研究,我解决了我的问题:)


没有必要使用字符串表[],因为字符串的长度限制是 256 字节。


事实上,字符串的长度没有限制(只有在引号""之间进行初始化时才有限制)。

因此,您只需使用以下代码

   CJAVal srce;
   
   string s;
   int cpt=0;
   
   int handle=FileOpen("json_sample.txt",FILE_READ|FILE_TXT|FILE_ANSI);
   while(!FileIsEnding(handle)) StringAdd(s,FileReadString(handle));
   FileClose(handle);
   
   srce.Deserialize(s);


s string 变量的长度可以超过 256 个字符:)


再见、

Erwann.

 
danielsokolowsk:

有谁或作者能回答这是否应该支持嵌套 JSON?也就是说,一个 CJAVal 实例包含一个键 "2 "和 "3",它们是另一个 CJAVal 实例。代码似乎可以运行,但在序列化时,键是空白的。

例如,我得到


但应该得到

丹尼尔,在使用嵌套的 JSON 对象(而不是数组)时,我也遇到了键为空的问题。我使用 Set()函数 解决了这个问题。示例

CJAVal msg, content;
msg["messageName"] = "TickData";
content["instrument"] = Symbol();
content["timeFrame"] = (int) Period();
content["time"] = (int) TimeCurrent();
content["open"] = iOpen(Symbol(), Period(), 0);
msg["content"].Set(content);
Print("Sending JSON to server: ", msg.Serialize());

 
Andrey Dik:

圣经中存在一些错误。附上更正后的版本,感谢作者,也许您不会介意。

谢谢!

 

如何从 JSON 树中删除 元素。有设置和添加的方法,但没有删除的方法。

预先感谢

[删除]  

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