Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 8696
- Рейтинг:
- Опубликован:
- 2015.08.18 12:07
- Обновлен:
- 2018.01.08 15:27
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++.
string in, out; CJAVal js(NULL, jtUNDEF); bool b; //--- Print("JASon Example Deserialization:"); in="{\"a\":[1,2]}"; out=""; // пример входных данных b=js.Deserialize(in); // десериализовали js.Serialize(out); // сериализовали назад Print(in+" -> "+out); // вывели для сравнения //--- Print("JASon Example Serialization:"); js["Test"]=1.4; // пример выходных данных out=""; js.Serialize(out); // сериализовали Print(out); // вывели посмотреть
Практичный пример: авторизация на сайте и парсинг ответа
CJAVal jv; jv["login"]="Login"; // логин jv["password"]="Pass"; // пароль //--- сериализуем в строку {"login":"Login","password":"Pass"} char data[]; ArrayResize(data, StringToCharArray(jv.Serialize(), data, 0, WHOLE_ARRAY)-1); //--- отправляем данные char res_data[]; string res_headers=NULL; int r=WebRequest("POST", "http://my.site.com/Authorize", "Content-Type: text/plain\r\n", 5000, data, res_data, res_headers); //--- допустим в ответе {"accessToken":"ABRAKADABRA","session_id":124521} //--- забираем AccessToken jv.Deserialize(res_data); string AccessToken=jv["accessToken"].ToStr();
Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL.
----
v1.02
- В протокол добавлены функции Escape / Unescape экранирования при сериализации и деэкранирования при десериализации спецсимволов \\, \", \/, \b, \r, \n, \t, \f
v1.03
- Добавлены функции "Add" для добавления элементов массива.
v1.04
-
Добавлено указание кодовой страницы строк при десериализации.
::Deserialize(res_data, CP_UTF8);
v1.05
- Добавлено преобразование \uXXXX последовательности в символ.
v1.06
- Добавлены оператор[] прямого доступа к элементам.
- Добавлена функция копирования элемента.
v1.07
- Исправлена ошибка компиляции в 1492 билде.
v1.08
- Исправлен парсинг массива массивов (например { "a":[[1],[2]] } ).
v1.09
- Добавлена возможность сериализовать double-числа с указанной точностью (по умолчанию было 8 знаков). Для этого добавлен параметр точности m_prec, который можно задавать как вручную так и при вызове конструктора или функции Add.
- Исправлен баг в МТ4 из-за отличного от МТ5 поведения функции ArrayCopy (константа WHOLE_ARRAY различная).
v1.10
- Добавлена функция int Size() для возврата количества элементов
v1.11
- Исправлено дефолтное значение параметра m_prec (на =8) с учетом поведения функции DoubleToString :
- Если значение m_prec лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой.
- Если значение m_prec лежит в диапазоне от -1 до -16, то будет получено строковое представление числа в научном формате с указанным количеством знаков после запятой.
- Во всех остальных случаях строковое представление числа будет содержать 8 знаков после запятой.
v1.12
- Добавлен шаг резервированных элементов = 100 в ArrayResize.
- В функцию Clear добавлены два параметра - дефолтный тип и сохранение имени ключа. Используется при заполнении массивов/объектов в функциях, чтобы не выполнять сброс типа или имени ключа объекта.

Индикатор FX5_SelfAdjustingRSI с возможностью изменения таймфрейма индикатора во входных параметрах.

Осциллятор Momentum с границами перекупленности/перепроданности в виде полос Боллинджера.

Осциллятор RVI с границами перекупленности/перепроданности в виде полос Боллинджера.

Индикатор FX5_SelfAdjustingMomentum с возможностью изменения таймфрейма индикатора во входных параметрах.