2021年06月18日
MQL5でJSON形式を扱う方法を説明します。
必要なモジュールをダウンロードし、インクルードすることで、JSONのシリアライズ/デシリアライズができるようになります。
まずはモジュールのインポートから確認しましょう。
モジュールは下記のリンクから取得できます。
JSONシリアライズとデシリアライズ(ネイティブMQL) – MetaTrader 5のためのライブラリ
『ZIPとしてダウンロード』を選択しましょう。
ダウンロードしたZIPファイルを解凍しましょう。
モジュールは下記のような構造となっています。
Scriptにはサンプルプログラムが入っています。
このファイルはScriptフォルダに入れなくても実行(コンパイル)できます。
一方Includeにはモジュールの本体である『JAson.mqh』が入っています。
『.mqh』ファイルはインクルードファイルと呼ばれ、これを呼び出すことで定義された変数や関数を使うことができます。
このファイルは必ずIncludeファイルに入れましょう。それにより他のファイルから正しくインポートできるようになります。
サンプルプログラムである『jason_test.mq5』はなくても問題ないファイルですが、『JAson.mqh』は必ず必要となります。
このファイルにはclass CJAValが定義されています。このCJAValクラスを使ってJSON形式を扱います。
またJSON文字列化、辞書(連想配列)化をそれぞれ行うシリアライズ、デシリアライズ関数もここで定義されています。
実際にシリアライズ、デシリアライズするサンプルを下で説明します。
こちらはサンプルコードになっています。
モジュールが正しくIncludeファイルに保存されているか確認するためにもこのコードをコンパイルしてみましょう。
コンパイルエラーが発生する場合は正しい場所に保存されていない可能性があります。
コンパイルされた『jason_testex5』ファイルをMT5上で実行してみると、エキスパートタブにこのように表示されるはずです。
ただ、このサンプルは少しわかりにくいので下記にサンプルコードを添付します。
これはテキストをjson形式にデシリアライズするサンプルです。
#include <JAson.mqh> でjsonモジュールをインクルードするとこから始めます。
#include <JAson.mqh>
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
string text = "{\"name\":\"Tom\",\"age\":25,\"lotSize\":382.67,\"active\":true}";
CJAVal jsonData;
jsonData.Deserialize(text);
printf(jsonData["name"].ToStr());
printf(jsonData["age"].ToInt());
printf(jsonData["lotSize"].ToDbl());
printf(jsonData["active"].ToBool());
}
//+------------------------------------------------------------------+
ポイントは
つまりString型、Int型、Double型、Bool型を扱うことができます。
実行すると下記のようにコンソールに表示されるはずです。
Tom
25
382.67
true
これは辞書データを文字列化(シリアライズ)するサンプルです。
#include <JAson.mqh> でjsonモジュールをインクルードする点や、CJAValでjsonを格納する変数を定義する点は変わりません。
#include <JAson.mqh>
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
CJAVal jsonData;
jsonData["name"] = "Ken";
jsonData["age"] = 30;
jsonData["lotSize"] = 12.5;
jsonData["active"] = false;
string serializedText = jsonData.Serialize();
printf(serializedText);
}
//+------------------------------------------------------------------+
jsonData[キー] = 値
で格納できます。格納するデータタイプは前述の通り、String型、Int型、Double型、Bool型となります。
最後にjsonData.Serialize()を実行することでserializedTextにシリアライズされた文字列が格納されます。
実行すると下記のようにコンソールに表示されるはずです。
{"name":"Ken","age":30,"lotSize":12.50000000,"active":false}
MQL5でJSON形式を実装する方法をまとめました。
デシリアライズを使ってwebRequestでデータを受け取ったり、逆に計算したデータをシリアライズしてJSON形式で出力することもできます。
MQL5の書き方はC++に似ていますが難しい部分も多いと思います。
ContraではEAをアプリ上で作成、変換するサービスを展開しています。
無料でアプリのダウンロードができます。ぜひご利用ください。
コントラは最高のFXアプリを
目指して誠意開発を続けております。
機能の要望や、不具合などありましたらご遠慮なくヘッダーの問い合わせ、フィードバックからご連絡ください。またツイッターからでも大丈夫です!
皆様のFXトレードのお力になるFXアプリを目指しますので、これからもよろしくお願いいたします。