程序库: JSON Serialization and Deserialization (native MQL) - 页 15 1...89101112131415161718 新评论 Mihail Matkovskij 2021.11.24 17:57 #141 Artem Maltsev, 我建议您添加我的版本,因为下载模块的用户将无法添加:#107. if ((value = data["key1"]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } if ((value = value[0]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } if ((value = value["key2"]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } if ((value = value[0]) == NULL) { Print("value is NULL! Line: ", __LINE__); return; } if ((value = value["key3"]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } Sergey Likho 2022.01.19 09:37 #142 您能告诉我如何将四舍五入添加到双倍中吗? 下面有一个选项,但它添加了方括号。 CJAVal js(NULL,jtUNDEF); double d = 0.05; js["OrderLot"].Add(d,2); //результат "OrderLot":[0.05]. 如何获取? "OrderLot":0.05 Andre Luiz Medeiros Peixoto 2022.01.23 17:42 #143 Json 示例 { "id": 54, "nome": "12.01 alterado", "condicoes": [ { "id": 47, "estrategiaId": 54, "indicadorAId": 87, "indicadorA": { "id": 87, "nome": "iATR", "parametros": [ { "id": 46, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 88, "indicadorB": { "id": 88, "nome": "iAMA", "parametros": [ { "id": 47, "nome": "Aplicar a", "valor": 1.0 }, { "id": 48, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 49, "nome": "Periodo lento", "valor": 3.0 }, { "id": 50, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 51, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 }, { "id": 48, "estrategiaId": 54, "indicadorAId": 90, "indicadorA": { "id": 90, "nome": "iATR", "parametros": [ { "id": 52, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 89, "indicadorB": { "id": 89, "nome": "iAMA", "parametros": [ { "id": 53, "nome": "Aplicar a", "valor": 1.0 }, { "id": 54, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 55, "nome": "Periodo lento", "valor": 3.0 }, { "id": 56, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 57, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 } ] } 我需要获取关键字 "condicoes "的数组 "condicoes":[ { "id": 47, ... } , { "id": 48, ... }] 我的代码 mql string pJS=" ... " // Json 样本 js.Deserialize(pJS); Print(js["nome"].ToStr()); // 正确 = 12.01 alterado Print(js["condicoes"].m_type); // 类型 6 或 jtARRAY 是否正确 Print(js["condicoes"].Size()); //不工作......返回 1,但正确的是 2 能帮我吗? 谢谢 Laszlo Tormasi 2022.01.24 07:24 #144 Andre Luiz Medeiros Peixoto #:Json 示例 我需要获取关键字 "condicoes "的数组 "condicoes":[ { "id": 47, ... } , { "id": 48, ... }] 。 我的代码 mql 能帮帮我吗? 谢谢 在我的电脑上运行正常。如何将 json 字符串放入 pJS 变量? Faisal Mahmood 2022.02.22 03:35 #145 @Artem Maltsev 感谢你创建了这个 JSON 库。它是基于某个 C++ 库吗? 你有相关的性能基准吗?另外,它在内部使用 1 字节还是 2 字节字符来存储数据? Mohammad Hossein Sadeghi 2022.03.28 15:34 #146 当值为空时, Deserialize() 会将类型设置为 jtNULL,但不会将 NULL赋值 给 m_sv,因此如果 ToStr() 方法与 NULL 比较,则返回 false: #include <JAson.mqh> //+------------------------------------------------------------------+ //| 脚本程序启动功能| //+------------------------------------------------------------------+ void OnStart() { string serialized="{\"a\":1,\"b\":null}"; CJAVal json; json.Deserialize(serialized); if(json["b"].ToStr()==NULL) { Alert("b is NULL"); } else if(json["b"].ToStr()=="") { Alert("b is an empty string"); } else { Alert("b is ", json["b"].ToStr()); } } 输出结果如下 2022.03.28 17:50:02.833 test-jsonNULLComparison (GBPUSD,M30) 警报:b 为空字符串 解决方法是将值的类型与 jtNULL 进行比较,或者修改第 220 行的源代码,添加 "m_sv=NULL;": if (i+3<slen) if (StringCompare(GetStr(js, i, 4), "null", false)==0) { m_sv=NULL; i+=3; return true; } Ruslan Piraliyev 2022.07.09 03:54 #147 下午好! 酷库帮了我大忙,非常感谢。 我刚刚遇到了这个问题--如何从字符串中提取子串: 有一个字符串 {"类型": "设置", "数据":{"自动交易":true, "停止交易":true}}}。 我需要提取数据子串。 这样做行不通: CJAVal js; js.Deserialise(stroka); js["data"].ToStr(); Ruslan Piraliyev 2022.07.10 15:03 #148 Ruslan Piraliyev #:下午好!很酷的图书馆帮了大忙,非常感谢。我刚刚遇到了这个问题--如何从字符串中提取子串:有一个字符串{"类型": "设置", {"数据": "自动交易":true, "停止交易":true}}}。我需要提取数据子串。这样做行不通:CJAVal js;js.Deserialize(stroka);js["data"].ToStr(); 到目前为止,只找到了一种提取所需子串的方法: js.Deserialize(stroka); string data2=js["data"].Serialize(); js2.Deserialise(data2); 也就是说,所需子串应分别序列化和反序列化。 Mihail Matkovskij 2022.08.15 17:28 #149 Sergey Likho #:您能告诉我如何将四舍五入加到双倍吗?下面有一个变体,但它增加了方括号。如何得到? 像这样试试: CJAVal js(NULL,jtUNDEF); double d = 0.05; js["OrderLot"] = d; Aleksi-Trader 2022.12.21 17:57 #150 不幸的是,有些东西又失灵了。 你怎么能从不灵的代码中吸取教训呢?#include <JAson.mqh> CJAVal jv; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnStart() { string user = "Test User"; string account="testuser mail"; string EA="010000"; bool reply=false; jv["user"]=user; jv["account"]=account; jv["itemnumber"]=EA; char data[]; ArrayResize(data, StringToCharArray(jv.Serialize(), data, 0, WHOLE_ARRAY)-1); //--- 数据的传输 char res_data[]; string res_headers=NULL; int r=WebRequest("POST", "meine adresse", "Content-Type: text/plain\r\n", 5000, data, res_data, res_headers); /ArrayPrint(data); //--- 假设我们从响应中提取 {"reply": "true"} //--- 访问令牌 jv.Deserialize(res_data); string replyasstrinng=jv["isValid"].ToStr(); Print("reply as string: ",replyasstrinng); }我现在用 GET 和 POST 进行了尝试。"meine adresse"当然,这是一个页面的 URL,其上的响应显示为 {"isValid":true}。 或者 {"isValid":false}或 作为响应。但是,如果我使用 Print("reply as string: ",replyasstrinng);完全没有反应。 这是什么原因呢? 1...89101112131415161718 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Artem Maltsev, 我建议您添加我的版本,因为下载模块的用户将无法添加:#107.
您能告诉我如何将四舍五入添加到双倍中吗?
下面有一个选项,但它添加了方括号。
如何获取?
{ "id": 54, "nome": "12.01 alterado", "condicoes": [ { "id": 47, "estrategiaId": 54, "indicadorAId": 87, "indicadorA": { "id": 87, "nome": "iATR", "parametros": [ { "id": 46, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 88, "indicadorB": { "id": 88, "nome": "iAMA", "parametros": [ { "id": 47, "nome": "Aplicar a", "valor": 1.0 }, { "id": 48, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 49, "nome": "Periodo lento", "valor": 3.0 }, { "id": 50, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 51, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 }, { "id": 48, "estrategiaId": 54, "indicadorAId": 90, "indicadorA": { "id": 90, "nome": "iATR", "parametros": [ { "id": 52, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 89, "indicadorB": { "id": 89, "nome": "iAMA", "parametros": [ { "id": 53, "nome": "Aplicar a", "valor": 1.0 }, { "id": 54, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 55, "nome": "Periodo lento", "valor": 3.0 }, { "id": 56, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 57, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 } ] }在我的电脑上运行正常。如何将 json 字符串放入 pJS 变量?
@Artem Maltsev 感谢你创建了这个 JSON 库。它是基于某个 C++ 库吗?
你有相关的性能基准吗?另外,它在内部使用 1 字节还是 2 字节字符来存储数据?
当值为空时, Deserialize() 会将类型设置为 jtNULL,但不会将 NULL赋值 给 m_sv,因此如果 ToStr() 方法与 NULL 比较,则返回 false:
输出结果如下
2022.03.28 17:50:02.833 test-jsonNULLComparison (GBPUSD,M30) 警报:b 为空字符串
解决方法是将值的类型与 jtNULL 进行比较,或者修改第 220 行的源代码,添加 "m_sv=NULL;":
下午好!
酷库帮了我大忙,非常感谢。
我刚刚遇到了这个问题--如何从字符串中提取子串:
有一个字符串
{"类型": "设置", "数据":{"自动交易":true, "停止交易":true}}}。
我需要提取数据子串。
这样做行不通:
CJAVal js;
js.Deserialise(stroka);
js["data"].ToStr();
下午好!
很酷的图书馆帮了大忙,非常感谢。
我刚刚遇到了这个问题--如何从字符串中提取子串:
有一个字符串
{"类型": "设置", {"数据": "自动交易":true, "停止交易":true}}}。
我需要提取数据子串。
这样做行不通:
CJAVal js;
js.Deserialize(stroka);
js["data"].ToStr();
到目前为止,只找到了一种提取所需子串的方法:
js.Deserialize(stroka);
string data2=js["data"].Serialize();
js2.Deserialise(data2);
也就是说,所需子串应分别序列化和反序列化。
您能告诉我如何将四舍五入加到双倍吗?
下面有一个变体,但它增加了方括号。
如何得到?
像这样试试:
不幸的是,有些东西又失灵了。
你怎么能从不灵的代码中吸取教训呢?
我现在用 GET 和 POST 进行了尝试。
"meine adresse"当然,这是一个页面的 URL,其上的响应显示为
{"isValid":true}。
或者
{"isValid":false}或
作为响应。
但是,如果我使用
完全没有反应。
这是什么原因呢?