ライブラリ: JSONシリアライズとデシリアライズ(ネイティブMQL) - ページ 15 1...89101112131415161718 新しいコメント Mihail Matkovskij 2021.11.24 17:57 #141 Artem Maltsev さん、私のバージョンを追加することをお勧めします。モジュールをダウンロードした人はそれができないでしょうから:#107. if ((value = data["key1"]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } if ((value = value[0]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } if ((value = value["key2"]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } if ((value = value[0]) == NULL) { Print("value is NULL! Line: ", __LINE__); return; } if ((value = value["key3"]) == NULL) { Print("Value is NULL! Line: ", __LINE__); return; } Sergey Likho 2022.01.19 09:37 #142 二重丸の付け方を教えてください。 下にオプションがありますが、角括弧が追加されます。 CJAVal js(NULL,jtUNDEF); double d = 0.05; js["OrderLot"].Add(d,2); //результат "OrderLot":[0.05]. どうすればいいですか? "OrderLot":0.05 Andre Luiz Medeiros Peixoto 2022.01.23 17:42 #143 Jsonサンプル { "id": 54, "nome": "12.01 alterado", "condicoes": [ { "id": 47, "estrategiaId": 54, "indicadorAId": 87, "indicadorA": { "id": 87, "nome": "iATR", "parametros": [ { "id": 46, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 88, "indicadorB": { "id": 88, "nome": "iAMA", "parametros": [ { "id": 47, "nome": "Aplicar a", "valor": 1.0 }, { "id": 48, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 49, "nome": "Periodo lento", "valor": 3.0 }, { "id": 50, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 51, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 }, { "id": 48, "estrategiaId": 54, "indicadorAId": 90, "indicadorA": { "id": 90, "nome": "iATR", "parametros": [ { "id": 52, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 89, "indicadorB": { "id": 89, "nome": "iAMA", "parametros": [ { "id": 53, "nome": "Aplicar a", "valor": 1.0 }, { "id": 54, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 55, "nome": "Periodo lento", "valor": 3.0 }, { "id": 56, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 57, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 } ] } "condicoes "というキーの配列を取得したい。 "condicoes":[ { "id": 47, ... } , { "id": 48, ... } ]。 私のコード mql string pJS=" ... " // Jsonサンプル js.Deserialize(pJS); Print(js["nome"].ToStr()); // 12.01分身 Print(js["condicoes"].m_type); // タイプ6またはjtARRAYが正しい。 Print(js["condicoes"].Size()); //...1を返すが、2が正しい 私を助けることができますか? タンク Laszlo Tormasi 2022.01.24 07:24 #144 Andre Luiz Medeiros Peixoto #:Jsonサンプル "condicoes "というキーの配列を取得したい "condicoes":[ { "id": 47, ... } , { "id": 48, ... } ]。 私のコード mql 助けてくれますか? 戦車 私のパソコンでは正常に動作しています。pJS変数にjson文字列をどのように入れるのですか? Faisal Mahmood 2022.02.22 03:35 #145 Artem Maltsev このJSONライブラリを作ってくれてありがとう。C++ ライブラリをベースにしているのですか? パフォーマンスベンチマークはありますか?また、データの保存には内部的に1バイトまたは2バイトの文字を使用するのですか? Mohammad Hossein Sadeghi 2022.03.28 15:34 #146 値がNULL の 場合、 Deserialize() は型を jtNULL に設定しますが、m_sv には NULL を代入しないため、ToStr() メソッドが NULL と比較されると false を返します: #include <JAson.mqh> //+------------------------------------------------------------------+ //| スクリプト・プログラム開始機能| //+------------------------------------------------------------------+ void OnStart() { string serialized="{\"a\":1,\"b\":null}"; CJAVal json; json.Deserialize(serialized); if(json["b"].ToStr()==NULL) { Alert("b is NULL"); } else if(json["b"].ToStr()=="") { Alert("b is an empty string"); } else { Alert("b is ", json["b"].ToStr()); } } と出力される: 2022.03.28 17:50:02.833 test-jsonNULLComparison (GBPUSD,M30) 警告: b は空の文字列です。 回避策としては、値の型を jtNULL と比較するか、220 行目のソースコードに "m_sv=NULL;" を追加して変更します: if (i+3<slen) if (StringCompare(GetStr(js, i, 4), "null", false)==0) { m_sv=NULL; i+=3; return true; } Ruslan Piraliyev 2022.07.09 03:54 #147 こんにちは! クールなライブラリーにとても助けられています。 文字列から部分文字列を抽出する方法です: 以下の文字列があります。 {"type": "settings", "data":{"auto_trade":true, "stop_trade":true}} という文字列があります。} データの部分文字列を取り出す必要があります。 そのように動作しません: CJAVal js; js.Deserialise(stroka); js["data"].ToStr(); Ruslan Piraliyev 2022.07.10 15:03 #148 Ruslan Piraliyev #:こんにちは!クールなライブラリーはとても役に立ちます。文字列から部分文字列を抽出する方法です:文字列{"type": "settings", "data":{"auto_trade":true, "stop_trade":true}} という文字列があります。データの部分文字列を取り出す必要があります。そのように動作しません:CJAVal js;js.Deserialize(stroka);js["data"].ToStr(); 必要な部分文字列を取り出す方法は、今のところ1つしか見つかっていない: js.Deserialize(stroka); string data2=js["data"].Serialize(); js2.Deserialise(data2); つまり、必要な部分文字列は、シリアライズとデシリアライズを別々に行う必要があります。 Mihail Matkovskij 2022.08.15 17:28 #149 Sergey Likho #:二重丸の付け方を教えてください。以下のような方法がありますが、角括弧が追加されます。どうすればよいのでしょうか? 次のようにしてください: CJAVal js(NULL,jtUNDEF); double d = 0.05; js["OrderLot"] = d; Aleksi-Trader 2022.12.21 17:57 #150 残念ながら、また何かがうまくいかなかった。 うまくいかないコードからどうやって学べというのか?#include <JAson.mqh> CJAVal jv; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnStart() { string user = "Test User"; string account="testuser mail"; string EA="010000"; bool reply=false; jv["user"]=user; jv["account"]=account; jv["itemnumber"]=EA; char data[]; ArrayResize(data, StringToCharArray(jv.Serialize(), data, 0, WHOLE_ARRAY)-1); //--- データの送信 char res_data[]; string res_headers=NULL; int r=WebRequest("POST", "meine adresse", "Content-Type: text/plain\r\n", 5000, data, res_data, res_headers); //ArrayPrint(data); //--- レスポンスから{"reply": "true"}を取り出すとしよう。 //--- AccessToken jv.Deserialize(res_data); string replyasstrinng=jv["isValid"].ToStr(); Print("reply as string: ",replyasstrinng); }GETとPOSTで試してみた。"meine adresse"はもちろん、レスポンスが次のように表示されるページのURLです。 {"isValid":true}と表示されます。 あるいは {"isValid":false}となります。 をレスポンスとして返します。しかし Print("reply as string: ",replyasstrinng);を使用すると、まったく何もしない。 その理由は何ですか? 1...89101112131415161718 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Artem Maltsev さん、私のバージョンを追加することをお勧めします。モジュールをダウンロードした人はそれができないでしょうから:#107.
二重丸の付け方を教えてください。
下にオプションがありますが、角括弧が追加されます。
どうすればいいですか?
{ "id": 54, "nome": "12.01 alterado", "condicoes": [ { "id": 47, "estrategiaId": 54, "indicadorAId": 87, "indicadorA": { "id": 87, "nome": "iATR", "parametros": [ { "id": 46, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 88, "indicadorB": { "id": 88, "nome": "iAMA", "parametros": [ { "id": 47, "nome": "Aplicar a", "valor": 1.0 }, { "id": 48, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 49, "nome": "Periodo lento", "valor": 3.0 }, { "id": 50, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 51, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 }, { "id": 48, "estrategiaId": 54, "indicadorAId": 90, "indicadorA": { "id": 90, "nome": "iATR", "parametros": [ { "id": 52, "nome": null, "valor": 10.0 } ] }, "retornoA": 0, "comparador": ">", "indicadorBId": 89, "indicadorB": { "id": 89, "nome": "iAMA", "parametros": [ { "id": 53, "nome": "Aplicar a", "valor": 1.0 }, { "id": 54, "nome": "Periodo rapido", "valor": 2.0 }, { "id": 55, "nome": "Periodo lento", "valor": 3.0 }, { "id": 56, "nome": "Deslocalmento", "valor": 4.0 }, { "id": 57, "nome": "Aplicar a", "valor": 0.0 } ] }, "retornoB": 0 } ] }私のパソコンでは正常に動作しています。pJS変数にjson文字列をどのように入れるのですか?
Artem Maltsev このJSONライブラリを作ってくれてありがとう。C++ ライブラリをベースにしているのですか?
パフォーマンスベンチマークはありますか?また、データの保存には内部的に1バイトまたは2バイトの文字を使用するのですか?
値がNULL の 場合、 Deserialize() は型を jtNULL に設定しますが、m_sv には NULL を代入しないため、ToStr() メソッドが NULL と比較されると false を返します:
と出力される:
2022.03.28 17:50:02.833 test-jsonNULLComparison (GBPUSD,M30) 警告: b は空の文字列です。
回避策としては、値の型を jtNULL と比較するか、220 行目のソースコードに "m_sv=NULL;" を追加して変更します:
こんにちは!
クールなライブラリーにとても助けられています。
文字列から部分文字列を抽出する方法です:
以下の文字列があります。
{"type": "settings", "data":{"auto_trade":true, "stop_trade":true}} という文字列があります。}
データの部分文字列を取り出す必要があります。
そのように動作しません:
CJAVal js;
js.Deserialise(stroka);
js["data"].ToStr();
こんにちは!
クールなライブラリーはとても役に立ちます。
文字列から部分文字列を抽出する方法です:
文字列
{"type": "settings", "data":{"auto_trade":true, "stop_trade":true}} という文字列があります。
データの部分文字列を取り出す必要があります。
そのように動作しません:
CJAVal js;
js.Deserialize(stroka);
js["data"].ToStr();
必要な部分文字列を取り出す方法は、今のところ1つしか見つかっていない:
js.Deserialize(stroka);
string data2=js["data"].Serialize();
js2.Deserialise(data2);
つまり、必要な部分文字列は、シリアライズとデシリアライズを別々に行う必要があります。
二重丸の付け方を教えてください。
以下のような方法がありますが、角括弧が追加されます。
どうすればよいのでしょうか?
次のようにしてください:
残念ながら、また何かがうまくいかなかった。
うまくいかないコードからどうやって学べというのか?
GETとPOSTで試してみた。
"meine adresse"はもちろん、レスポンスが次のように表示されるページのURLです。
{"isValid":true}と表示されます。
あるいは
{"isValid":false}となります。
をレスポンスとして返します。
しかし
を使用すると、まったく何もしない。
その理由は何ですか?