ライブラリ: JSONシリアライズとデシリアライズ(ネイティブMQL) - ページ 10 1...3456789101112131415161718 新しいコメント --- 2018.02.21 10:16 #91 固定 1.13 ファイル: JAson.mqh 31 kb Delta.800 2018.02.21 10:19 #92 o_o: ああ、私はおそらく君の問題が何なのか理解していなかったんだろう、君が示したラインはすべて手に入れることができた。{ "server_time": 1519120845, "pairs": { "btc_usd": { "decimal_places": 3, "min_price": 0.1, "max_price": 500000, "min_amount": 0.001, "hidden": 0, "fee": 0.2 }, "btc_rur": { ... }, "btc_eur": { ...交換はこのような返答をする...。(そして、ペアの数は異なる可能性があります....例えば、取引所がいくつかのペアをオフにしたり、追加したりする場合など)。 どうにかして、レスポンス内のすべてのペア名(btc_usd、btc_rur、btc_eurなど)をループまたは再帰呼び出しで取得する必要があります。ペアの最初と次の名前を取得する方法がわかりません。ペアの最初と次の名前を取得する方法がわかりません。 Andrey Dik 2018.02.21 11:07 #93 Delta.800:交換所ではこのような回答が返ってくる。(そして、ペアの数は異なることがあります....例えば、取引所がペアをオフにしたり追加したりする場合など)。どうにかしてレスポンス内のすべてのペア名(btc_usd、btc_rur、btc_eurなど)をループ内または再帰呼び出しで取得する必要があります。ペアの最初と次の名前を取得する方法がわかりません。ペアの最初と次の名前を取得する方法がわからない...わからない...。先頭の文字列をカット{ "server_time": 1519120845, "pairs": 次に、文字列の末尾の } を削除する。 その文字列をパーサーに渡す。 構造体をパーサーのデータで 埋める。そして、ペアの名前など、構造体を使って好きなことをする。 Delta.800 2018.02.21 12:11 #94 Andrey Dik:冒頭のラインをトリミングする 次に行末を削除する。}その後、文字列をパーサーに送り込む。構造体を パーサーのデータで 埋める。そして、ペア名など、構造体を好きなように使ってください。「それから文字列をパーサーに送り込む。- dataM.Deserialize(ttt); 「構造 体をパーサーのデータで 満たす。- どうやるんですか?(構造体を記述する必要はありません))ss私が言ったのは単純な構造のことで、オブジェクト指向のものではありません。struct bpInfo { public: ulong server_time; bpPairInfo pairs[]; bool FromJson(CJAVal& ja) { server_time=(uint)ja["server_time"].ToInt(); CJAVal* jp=ja["pairs"]; int n=ArrayResize(pairs, ArraySize(jp.m_e)); for (int i=0; i<n; ++i) pairs[i].FromJson(jp.m_e[i]); return true; } }; ここにも似たようなものがあると思うのですが、わかりません。(OOPはまだ得意ではないので...)。 Andrey Dik 2018.02.21 12:17 #95 o_o:固定1.13この例を試してみよう: #include "JAson.mqh" //+------------------------------------------------------------------+ void OnStart () { string in, out; CJAVal js (NULL, jtUNDEF); bool b; //--- in = "{\"фирма1\":{\"модельный_ряд1\":[[0.1,1.3],[0.2,1.5],[0.3,2.0]],\"модельный_ряд2\":[[0.1,2.3],[0.2,2.5],[0.3,3.0]]},\"фирма2\":{\"модельный_ряд1\":[[0.2,3.8],[0.3,4.0],[0.4,4.5]],\"модельный_ряд2\":[[0.2,4.8],[0.3,5.0],[0.4,6.5]]}}}"; Print(in); out = ""; b = js.Deserialize (in); js.Serialize (out); Print (out); for (int i = 0; i < ArraySize (js.m_e); i++) { Print("---"); Print(js.m_e[i].m_key); for (int i1 = 0; i1 < ArraySize (js.m_e [i].m_e); i1++) { Print(" : ", js.m_e[i].m_e[i1].m_key); for (int i2 = 0; i2 < ArraySize (js.m_e [i].m_e [i1]. m_e); i2++) { Print(" : ", js.m_e[i].m_e[i1].m_e[i2].m_key, " :", js.m_e[i].m_e[i1].m_e[i2].ToDbl()); } } } } //+------------------------------------------------------------------+ Andrey Dik 2018.02.21 12:19 #96 Delta.800:「その文字列をパーサーに送る。- dataM.Deserialize(ttt); 「構造体を パーサーのデータで 満たす。- どうやるんですか?(構造を記述する必要はありません)。企業やモデルの範囲についての私の例を見てください - パーサーからデータを取得する方法を示しています。 o_o: 修正1.13 しかし......。分解してタイミングを収集するのは完璧なんだけど、データが取得できない......。デーブルやintsなどはダメなのかな?- 文字列は文字列のままにしておいて、この文字列を外部からどう扱うかを決める。 --- 2018.02.21 12:31 #97 Andrey Dik:しかし......。用語の分解と組み立てはいいけど、データが取れない...。デーブルやintsなどは必要ないかも?- 文字列は文字列のままにしておいて、外からこの文字列をどう扱うかを決める。配列の中に配列があるということは、もうひとつループ・レベルi3を追加する必要があるということだ。 модельный_ряд1 :[ [ 0.1,1.3], [ 0.2,1.5], [ 0.3,2.0] ] #include <JAson.mqh> //+------------------------------------------------------------------+ void OnStart () { string in, out; CJAVal js (NULL, jtUNDEF); bool b; //--- in = "{\"фирма1\":{\"модельный_ряд1\":[[0.1,1.3],[0.2,1.5],[0.3,2.0]],\"модельный_ряд2\":[[0.1,2.3],[0.2,2.5],[0.3,3.0]]},\"фирма2\":{\"модельный_ряд1\":[[0.2,3.8],[0.3,4.0],[0.4,4.5]],\"модельный_ряд2\":[[0.2,4.8],[0.3,5.0],[0.4,6.5]]}}}"; Print(in); out = ""; b = js.Deserialize (in); js.Serialize (out); Print (out); for (int i = 0; i < ArraySize (js.m_e); i++) { Print("---"); Print(js.m_e[i].m_key); for (int i1 = 0; i1 < ArraySize (js.m_e [i].m_e); i1++) { CJAVal* j1=GetPointer(js.m_e[i].m_e[i1]); Print(" : ", j1.m_key); for (int i2 = 0; i2 < ArraySize (j1. m_e); i2++) { CJAVal* j2=GetPointer(j1.m_e[i2]); for (int i3 = 0; i3 < ArraySize (j2. m_e); i3++) { CJAVal* j3=GetPointer(j2.m_e[i3]); Print(" : ", j3.m_key, " :", j3.ToDbl()); } } } } } Delta.800 2018.02.21 14:13 #98 ご回答いただいた皆様、本当にありがとうございました! { "server_time": 1519120845, "pairs": { "btc_usd": { "decimal_places": 3, "min_price": 0.1, "max_price": 500000, "min_amount": 0.001, "hidden": 0, "fee": 0.2 }, "btc_rur": { ... }, "btc_eur": { ... カップルのお名前をいただきました: CJAVal dataM; ... dataM.Deserialize(ttt); Print(dataM.m_e[0].m_key); Print(dataM.m_e[1].m_key); for (int i1 = 0; i1 < ArraySize (dataM.m_e [1].m_e); i1++) { CJAVal* j1=GetPointer(dataM.m_e[1].m_e[i1]); Print(" :-", j1.m_key); }結論 server_time pairs :-btc_usd :-btc_rur :-btc_eur :-ltc_btc ... 必要なもの Andrey Dik 2018.02.21 17:10 #99 o_o:配列の中に配列があるので、別のループレベルを追加する必要がある。ソーサリー、82レベル。 もっとシンプルにできないのか? --- 2018.02.21 17:42 #100 Andrey Dik:魔術・82レベルもっとシンプルにできないのか?アレイをこんなに深くしたのはあなたたちでしょ。 1...3456789101112131415161718 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
固定
1.13
ああ、私はおそらく君の問題が何なのか理解していなかったんだろう、君が示したラインはすべて手に入れることができた。
{ "server_time": 1519120845, "pairs": { "btc_usd": { "decimal_places": 3, "min_price": 0.1, "max_price": 500000, "min_amount": 0.001, "hidden": 0, "fee": 0.2 }, "btc_rur": { ... }, "btc_eur": { ...交換はこのような返答をする...。(そして、ペアの数は異なる可能性があります....例えば、取引所がいくつかのペアをオフにしたり、追加したりする場合など)。
どうにかして、レスポンス内のすべてのペア名(btc_usd、btc_rur、btc_eurなど)をループまたは再帰呼び出しで取得する必要があります。ペアの最初と次の名前を取得する方法がわかりません。ペアの最初と次の名前を取得する方法がわかりません。
交換所ではこのような回答が返ってくる。(そして、ペアの数は異なることがあります....例えば、取引所がペアをオフにしたり追加したりする場合など)。
どうにかしてレスポンス内のすべてのペア名(btc_usd、btc_rur、btc_eurなど)をループ内または再帰呼び出しで取得する必要があります。ペアの最初と次の名前を取得する方法がわかりません。ペアの最初と次の名前を取得する方法がわからない...わからない...。
先頭の文字列をカット
{ "server_time": 1519120845, "pairs":次に、文字列の末尾の } を削除する。
その文字列をパーサーに渡す。
構造体をパーサーのデータで 埋める。そして、ペアの名前など、構造体を使って好きなことをする。
冒頭のラインをトリミングする
次に行末を削除する。}
その後、文字列をパーサーに送り込む。
構造体を パーサーのデータで 埋める。そして、ペア名など、構造体を好きなように使ってください。
「それから文字列をパーサーに送り込む。- dataM.Deserialize(ttt);
「構造 体をパーサーのデータで 満たす。- どうやるんですか?(構造体を記述する必要はありません))
ss私が言ったのは単純な構造のことで、オブジェクト指向のものではありません。
ここにも似たようなものがあると思うのですが、わかりません。(OOPはまだ得意ではないので...)。固定
1.13
この例を試してみよう:
「その文字列をパーサーに送る。- dataM.Deserialize(ttt);
「構造体を パーサーのデータで 満たす。- どうやるんですか?(構造を記述する必要はありません)。
企業やモデルの範囲についての私の例を見てください - パーサーからデータを取得する方法を示しています。
o_o:
修正
1.13しかし......。分解してタイミングを収集するのは完璧なんだけど、データが取得できない......。デーブルやintsなどはダメなのかな?- 文字列は文字列のままにしておいて、この文字列を外部からどう扱うかを決める。
しかし......。用語の分解と組み立てはいいけど、データが取れない...。デーブルやintsなどは必要ないかも?- 文字列は文字列のままにしておいて、外からこの文字列をどう扱うかを決める。
配列の中に配列があるということは、もうひとつループ・レベルi3を追加する必要があるということだ。
модельный_ряд1 :[ [ 0.1,1.3], [ 0.2,1.5], [ 0.3,2.0] ]ご回答いただいた皆様、本当にありがとうございました!
{ "server_time": 1519120845, "pairs": { "btc_usd": { "decimal_places": 3, "min_price": 0.1, "max_price": 500000, "min_amount": 0.001, "hidden": 0, "fee": 0.2 }, "btc_rur": { ... }, "btc_eur": { ...カップルのお名前をいただきました:
結論
必要なもの
配列の中に配列があるので、別のループレベルを追加する必要がある。
ソーサリー、82レベル。
もっとシンプルにできないのか?
魔術・82レベル
もっとシンプルにできないのか?
アレイをこんなに深くしたのはあなたたちでしょ。