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

 

您已经知道引用WebRequest() 的 示例--以及它如何将加载的数据转化为可读的内容?

只有这样,您才能分析Jason 文本

Dokumentation zu MQL5: Netzwerkfunktionen / WebRequest
Dokumentation zu MQL5: Netzwerkfunktionen / WebRequest
  • www.mql5.com
WebRequest - Netzwerkfunktionen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Carl Schreiber #:

您已经知道引用WebRequest() 的 示例--以及它如何将加载的数据转化为可读数据?

只有这样,您才能分析Jason 文本

好的,我现在稍微改了一下,这对我帮助很大。

打印出来的信息是

2022.12.21 20:20:48.718 jason_test (GER40,H1) 文件已成功下载,大小为 17 字节。

对我来说,这意味着有一个来自服务器的响应,我只需对其进行分析。而且还创建了一个名为 url 的文件,其中包含了我正在寻找的答案。

感谢卡尔的帮助
 

您能更新添加一些功能吗?

JAval j1; j1.Add(1);
j1["a"] = 1;
j1["b"] = 2;


能否添加此功能?

j1.Del("a");
j1.Pop();
j1.shift();
j1.sort();
j1.sort();
 

下一次更新后,它就停止工作了。在日志中--有错误的行号

Build 3756.

 

结构如下

[

{

"ticket":671073362

},

{

"票":111111111

}

]


我想获得 2 个项目。第一张票和第二张票。

string js = "{\"ticket\":671073362\"},{\"ticket\":111111111}";

jv.Deserialize(js);

Print( jv["ticket"].ToStr());

这样我只能访问第一张票。如果有第二张票和后续票,如何访问它们?

https://www.mql5.com/ru/forum/63015/page3#comment_2844920 上讨论过这个问题,但作者将这种结构封装在一个命名数组中,就像这样。

string js = "{\"array\":[{\"ticket\":671073362},{\"ticket\":111111111}]}";

jv.Deserialize(js);

for(int i = 0; i < ArraySize(jv["array"].m_e); i++)
   {
      Print(jv["array"].m_e[i]["ticket"].ToInt());
   }

但如果我不能更改 json 结构,我该怎么办?如何获取这个数组并浏览其中的元素?

 
Nikita Chernyshov #:

有这样一种结构

[

{

"ticket":671073362

},

{

"ticket":111111111

}

]

...

指定的字符串与开头给出的结构不匹配,不是有效的 json 字符串:

string js = "{\"ticket\":671073362\"},{\"ticket\":111111111}";

应该是有效的:

string js = "[{\"ticket\":671073362},{\"ticket\":111111111}]";

该注释只针对 json-a 的规范,而不考虑它在特定库中是如何实现的。我使用的是另一个库。

 
Stanislav Korotky #:

指定的字符串与开头给出的结构不匹配,也不是有效的 json 字符串:

应为

该注释只针对 json-a 的规范,而不考虑它在特定库中是如何实现的。我使用的是另一个库。

嗯,没错,它缺少方格,但对方格没有帮助)。

[删除]  
类函数宏 'DEBUG_PRINT_KEY' 的参数过多 JAson.mqh 391 40
if (type != jtUNDEF) { DEBUG_PRINT_KEY(); return false; }  // 如果值已经有了类型,则会出错

参见宏 "DEBUG_PRINT_KEY "的声明 JAson.mqh

#ifdef  DEBUG
    #define  DEBUG_PRINT_KEY() Print(key+" "+string(__LINE__))
#else
    #define  DEBUG_PRINT_KEY()
#endif

在最新的 mql5 编译中出现此警告。

知道如何修复吗?

 
Arpit T #:
有办法解决吗?

删除括号

if (type != jtUNDEF) { DEBUG_PRINT_KEY; return false; }  // 如果值已经有了类型,则会出错
#ifdef  DEBUG
    #define  DEBUG_PRINT_KEY Print(key+" "+string(__LINE__))
#else
    #define  DEBUG_PRINT_KEY
#endif
[删除]  
Manuel Alejandro Cercos Perez #:

去掉括号

已修复,谢谢

我在此附上修复后的代码

附加的文件:
JAson_1.13.mqh  45 kb