ライブラリ: JSONシリアライズとデシリアライズ(ネイティブ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は検証後、Codebaseで公開します。

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オブジェクトが1つあります。そして、注文プロパティタイプの CJAValオブジェクトが2つあります。

私はデータベースにこれらの注文に関するデータを格納したい。

おおよそこんな感じです:

//--- オブジェクト
   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}; // 欲しい。
//--- オーダー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";

Responseフィールドを注文プロパティの配列にしたい。

そして、そのようなレコードjv_database["Response"][idx]は、ポインタまたは注文オブジェクト自体を返す必要があります。

アドバイスをお願いします。ありがとうございます。

 
Dennis Kirichenko:
そして、そのようなレコード jv_database["Response"][idx] は、ポインタまたは注文オブジェクト自体を返す必要があります。

数値インデックスによる参照について話していることを正しく理解していますか?DB["Response"] 配列からのオブジェクトへのポインタは、インデックス[idx]で返されるべきですか?

できると思います。

---

しかし、{x1, x2}型による初期化はおそらくできません。私の記憶では、このタイプの初期化は変数宣言の 瞬間、つまりコンストラクタの一種としてのみ利用可能です。しかし、作成された配列に値を設定することはできません。

だから、この方法でやるしかないのだ:

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

数値インデックスによる処理ということでよろしいでしょうか?DB["Response"] 配列からのオブジェクトへのポインタは、インデックス[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
    }
}