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

 
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] ]; }
 
o_o:

看起来很清楚,但我有些地方不明白......例如,一个简单的实际任务:我们复制图表并创建一个数组,每个数组中有 3 个图表,字段为 "symbol "和"period"。

也就是说,我们应该得到如下结果:{ "keyboard":[ [{"符号":美元兑日元,"周期":5},{"符号":澳元兑美元 "周期":5},{"符号":欧元 美元"周期"5 }],[{"符号":英镑兑美元,"周期":5},{"符号":新西兰元兑美元,"周期":5},{"符号":欧元兑日元,"周期":5} ] } ] }

嵌套数组中元素的数量可通过变量配置。

 
JAval ja, je, js;

je["symbol"]="USDJPY"; je["period"]=5; ja.Add(je);
je["symbol"]="AUDUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="EURUSD"; je["period"]=5; ja.Add(je);

js["keyboard"].Add(ja);

ja.Clear();
je["symbol"]="GBPUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="NZDUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="EURJPY"; je["period"]=5; ja.Add(je);

js["keyboard"].Add(ja);


你是真的不清楚还是懒得自己编码?)

 
o_o:


你是真的不清楚还是懒得自己编码?)


不,阿列克谢,我不是懒得编码。问题的关键不在于此:你的所有示例都有固定数量的数组项。这是我的代码,不幸的是它不起作用。我不知道错误出在哪里。(((

   CJAVal j_keyboard; // 主数组
   CJAVal j_array;    // 嵌套数组 
   CJAVal j_item;     // 数组元素 

   //-- 确定传输元素的数量
   int count = ArraySize(array_value);
   if(count == 0) return(j_keyboard.Serialize()); // 没有元素

   int col = 0;
   for(int item = 0; item<count; item++)
      {
         //-- 填充最简单的元素
         j_item["text"] = array_value[item];
         
         if(col<columns) // 如果数字小于指定列,则添加到数组中
            {
               j_array.Add(j_item);
            }
         else
            {   
               
               // 达到指定列数后,将其添加到主数组中
               j_keyboard["keyboard"].Add(j_array);
               col = 0;
               j_array.Clear(); // 清除嵌套数组
            }
      }
   
   Print(j_keyboard.Serialize());
array_value - Это строчный массив переданных элементов
 
Алексей Барбашин:

这是我的代码,可惜不起作用。

你是怎么发现它不起作用的?

 
o_o:

你是如何发现它不起作用的?


序列化字符串输出的是一个空对象。我将制作一个脚本并上传到这里。

....过了一会儿...

阿列克谢,对不起,我搞砸了...我没有添加迭代器增量...(((

一切正常这就是和聪明人聊天的意义!)))再次感谢你们的开发,我已经用了快一年了!

附加的文件:
 
Алексей Барбашин:

序列化字符串输出的是一个空对象。我将编写一个脚本并发布在这里。

对我来说是有效的。

#include <JAson.mqh>
//------------------------------------------------------------------ OnStart
void OnStart()
{
        string array_value[]={"000", "111", "012", "AAA", "BBB", "ABC"};
        Print(Get(array_value, 3));
}
//------------------------------------------------------------------ Get
string Get(string& array_value[], int columns)
{       
        CJAVal jk; // 主数组
        int n=ArraySize(array_value); if (n==0) return jk.Serialize(); // 没有元素
        
        CJAVal ja;    // 嵌套数组 
        for(int i=0, c=0; i<n; i++, c++)
        {
                if (c>=columns) { jk["keyboard"].Add(ja); c=0; ja.Clear(); }
                CJAVal ji; ji["text"]=array_value[i]; ja.Add(ji); // 添加
        }
        if (ArraySize(ja.m_e)>0) jk["keyboard"].Add(ja);
        
        return jk.Serialize();
}

{"keyboard":[[{"text":"000"},{"text":"111"},{"text":"012"}],[{"text":"AAA"},{"text":"BBB"},{"text":"ABC"}]]}


你的代码有什么问题?

 
o_o:

我可以用。


你的代码有什么问题?


上面已经回答过了,我找到了我的错误。谢谢!)))

 

Алексей Барбашин:

很有效。这就是和聪明人聊天的意义!)))

一切都有一个调试程序。)

再次感谢你们的开发,我已经用了快一年了!

不客气

 

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

 jv.Deserialize( result); 


how can i iterate  it