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

 
Виктор Василюк:
我们现在该怎么办? 还有其他解决方法吗?
不要寻找放之四海而皆准的解决方案。为每个问题寻找不同的解决方案。
 
Виктор Василюк:

感谢您提供的库,但其中存在一些问题。

我不知道如何使用该库粘贴数组?

例如

string a[] = {"1", "2", "3"};
int b[] = {1, 2, 3};
double c[] = {1.1, 2.9, 3.03};

问题出现在声明 CJAVal 类型变量的 层面上。使用 CJAVal primer(jtARRAY, a); 并没有帮助。


请补充或扩展示例文件 ?????。


你好,维克多、

感谢您的评论。的确,该库版本没有明确添加数组元素的函数。

程序库已经更新。

1.03 版将在验证后发布在代码库中。

您可以下载本帖所附的 1.03 版。


数组的工作示例:

  string a[] = {"1", "2", "3"};
  int b[] = {1, 2, 3};
  double c[] = {1.1, 2.9, 3.03};

  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"].Add(c[0]);
  js["c"].Add(c[1]);
  js["c"].Add(c[2]);

  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["a"].m_e[2].ToStr()); // Вывод   3


附加的文件:
JAson.mqh  16 kb
 

阿列克谢,感谢您的辛勤劳动!非常必要的图书馆

我有这样一个实际任务。

有一个数据库类型的 CJAVal 对象。还有 2 个订单属性 类型的 CJAVal 对象。

我希望数据库包含这些订单的数据。

大概是这样的

//--- 对象
   CJAVal jv_database, // DB
   jv_order_1,         // 订单 1
   jv_order_2;         // 担保书 2
//--- DB
   jv_database["Result"]="Success";
   jv_database["ErrorMessage"]="No error";
   // jv_database["Response"][2]={jv_order_1,jv_order_2}; // WANTED.
//--- 命令 1
   jv_order_1["symbol"]="EURUSD";
   jv_order_1["ticket"]="1505254";
   jv_order_1["open_price"]="1.1065";
   jv_order_1["open_time"]="19.09.2016 11:53:31";
//--- 权证  2
   jv_order_2["symbol"]="USDJPY";
   jv_order_2["ticket"]="1505321";
   jv_order_2["open_price"]="100.02";
   jv_order_2["open_time"]="20.09.2016 14:12:53";

我希望响应字段是一个订单属性数组。

这样的记录 jv_database["Response"][idx]应返回一个指针或订单对象本身。

请提供建议。谢谢

 
Dennis Kirichenko:
这样的记录 jv_database["Response"][idx]应该返回一个指针或订单对象本身。

我是否正确理解了我们所说的按数字索引的引用?是否应该在索引 [idx] 处返回指向DB["响应"] 数组中对象的指针?

我认为可以。

---

但是通过 {x1, x2} 类型进行初始化--可能做不到。在我的记忆中,这种类型的初始化只有在变量声明 时才能使用,即作为构造函数的一种形式。但不能在创建的数组中设置值。

这就是你必须这样做的原因:

jv_database["Response"][0]=jv_order_1;
jv_database["Response"][1]=jv_order_2;
 
o_O:

我是否正确理解了我们所说的按数字索引处理?DB["响应"] 数组中的对象指针是否应该按索引 [idx] 返回?

我认为可以。

是的,没错。
 

另一个问题。有一个订单对象:

CJAVal order;
order["symbol"];
order["type"];
order["lot"];
order["price_open"];
order["price_close"];
order["stop_loss"];
order["take_profit"];

我们读取的源文件行包含多个订单的信息。事先并不知道有多少个订单。

如何在不指定订单 对象大小的情况下从字符串中读取所有信息?

 

我们说的是哪条线?

 
o_O:

我们说的是什么字符串?

包含数据库中所有订单数据的字符串(来自服务器)。
 

答案错误)。

我需要知道你到底想解析什么,是带有数组的 json 还是你自己编造的。这很难猜。

 

就是这种绳子:

{
     "symbol": "USDJPY",
     "type": "Buy",
     "lot": 0.5,
     "price_open": 102.36,
     "price_close": 102.44,
     "stop_loss": 99.25,
     "take_profit": 103.25 
    },
    {
     "symbol": "EURUSD",
     "type": "Sell",
     "lot": 0.2,
     "price_open": 1.1044,
     "price_close": 1.1252,
     "stop_loss": 1.1434,
     "take_profit": 1.0922
    }
}