ライブラリ: JSONシリアライズとデシリアライズ(ネイティブ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":[ [ [{"symbol":USDJPY, "period":5},{"symbol":AUDUSD, "period":5},{"symbol":EURUSD, "period":5}], [{"symbol":GBPUSD, "period":5},{"symbol":NZDUSD, "period":5},{"symbol":EURJPY, "period":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:

どうしてうまくいかないと気づいたのですか?


シリアライズ文字列は空のオブジェクトを出力します。スクリプトを作ってここにアップロードするつもりです。

....しばらくして

アレクセイ、ごめん、失敗した。イテレータのインクリメントを追加してなかった...(((

全部うまくいったよ。知的な人とおしゃべりするってこういうことなんだ!)))もう1年近く愛用しているあなたの開発に改めて感謝します!

ファイル:
 
Алексей Барбашин:

シリアライズ文字列は空のオブジェクトを出力します。スクリプトを作ってここに投稿します。

私の場合はうまくいった。

#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:

私の場合はうまくいく。


あなたのコードはどうなっていますか?


上で答えました。ありがとうございます!)))

 

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

うまくいっている。知的な人とただおしゃべりするというのは、そういうことなのだ!)))

全てにデバッグがあります。)

もう1年近く使っているあなたの開発に改めて感謝します!

どういたしまして

 

WebRequest の結果は配列です。

jv.Deserialize();


どのように 反復 できますか?