class JSON
Основной класс для работы с JSON-данными: парсинг, экранирование и преобразование значений.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «json.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека json.mqh представляет собой набор двух классов для работы с JSON и HTML-тегами в среде MQL. Основной класс JSON обеспечивает разбор JSON-строк, извлечение именованных полей, а также преобразование извлечённых значений в различные типы данных. Класс CTag предоставляет утилиты для поиска и извлечения содержимого между произвольными шаблонными маркерами в строках, в том числе для работы с HTML-тегами.
Классов: 2 · методов: 11 · конструкторов: 1 · деструкторов: 2 · отдельных функций: 0
class JSON
Основной класс для работы с JSON-данными: парсинг, экранирование и преобразование значений.
class CTag
Основной класс для поиска и извлечения содержимого между шаблонными тегами в строке.
~JSON()
Деструктор класса JSON.
string value()
Возвращает сохранённое строковое значение после парсинга.
double getDouble()
Преобразует сохранённое значение в число с плавающей запятой.
int getInteger()
Преобразует сохранённое значение в целое число.
datetime getDatetime()
Преобразует сохранённое значение в дату и время.
string getUnicode()
Возвращает строку с восстановленными Unicode-символами после расшифровки JSON-экранирования.
string Escape(string a)
Экранирует специальные символы строки для корректного представления в JSON.
string Unescape(string a)
Восстанавливает исходные символы из JSON-экранированной строки, включая Unicode-последовательности.
bool parse(string name,string &sBuffer)
Извлекает значение указанного именованного поля из JSON-строки и сохраняет его для дальнейшего доступа.
CTag()
Конструктор класса CTag, создающий пустой объект.
~CTag()
Деструктор класса CTag.
string GetTag(string &sbuffer,int &istartend,string startPattern,string endPattern,bool bExclude)
Ищет в буфере участок между начальным и конечным шаблонами и возвращает извлечённую подстроку с возможностью исключения самих шаблонов.
string GetText(string stag)
Извлекает текстовое содержимое из HTML-тегов, определяя его как то, что находится между символами '>' и '<'.
void RemoveSpace(string &stag)
Удаляет пробелы в начале и конце переданной строки.
#ifndef __JSON_213123812738
#define __JSON_213123812738
#property strict
/*
{
"request":"signal",
"params":
{
"key":"bf07e90aaa049276ceb03be96ebceb49","type_account":"demo","bet":"CALL","symbol":"frxEURUSD","amount":1.3,"amount_type":1,"duration":"5m"
}
,"answer":
{
"profile":"trader","binaryteam_betid":9050998,"result_code":700,"result_comment":"\u0412\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u044b, \u0433\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c",
"real":
{
"amount":"0.00","currency":"USD","percent":null
}
,"demo":
{
"amount":"9959.79","currency":"USD","percent":"0"
}
}
,"time":
{
"start":"2018-01-09 21:29:15","timeout":0.04834,"end":"2018-01-09 18:29:15"
}
}
нужно разбирать подобные схемы
{массив элементов JSON}
все элементы идут как "":""
следующий через ,
если встречается после : скобки {
то это массив таких элементов
*/
class JSON
{
protected:
string m_json; //данные
string m_value; //значение
string m_name;//имя
public:
JSON():m_name(NULL),m_json(NULL),m_value(NULL)
{
};
~JSON(){};
string value()
{
return m_value;
}
double getDouble()
{
return StringToDouble(m_value);
}
int getInteger()
{
return (int)StringToInteger(m_value);
}
datetime getDatetime()
{
return (datetime)StringToDouble(m_value);
}
string getUnicode()
{
m_value=Unescape(m_value);
return m_value;
}
string Escape(string a)
{
ushort as[], s[]; int n=StringToShortArray(a, as); if(ArrayResize(s, 2*n)!=2*n) return NULL;
int j=0;
for(int i=0; i<n; i++)
{
switch(as[i])
{
case '\\': s[j]='\\'; j++; s[j]='\\'; j++; break;
case '"': s[j]='\\'; j++; s[j]='"'; j++; break;
case '/': s[j]='\\'; j++; s[j]='/'; j++; break;
case 8: s[j]='\\'; j++; s[j]='b'; j++; break;
case 12: s[j]='\\'; j++; s[j]='f'; j++; break;
case '\n': s[j]='\\'; j++; s[j]='n'; j++; break;
case '\r': s[j]='\\'; j++; s[j]='r'; j++; break;
case '\t': s[j]='\\'; j++; s[j]='t'; j++; break;
default: s[j]=as[i]; j++; break;
}
}
a=ShortArrayToString(s,0,j);
return a;
}
string Unescape(string a)
{
ushort as[], s[]; int n=StringToShortArray(a, as); if(ArrayResize(s, n)!=n) return NULL;
int j=0,i=0;
while(i<n)
{
ushort c=as[i];
if(c=='\\' && i<n-1)
{
switch(as[i+1])
{
case '\\': c='\\'; i++; break;
case '"': c='"'; i++; break;
case '/': c='/'; i++; break;
case 'b': c=8; /*08='\b'*/; i++; break;
case 'f': c=12;/*0c=\f*/ i++; break;
case 'n': c='\n'; i++; break;
case 'r': c='\r'; i++; break;
case 't': c='\t'; i++; break;
case 'u': // \uXXXX
{
i+=2; ushort k=0;
for(int jj=0; jj<4 && i<n; jj++,i++)
{
c=as[i]; ushort h=0;
if(c>='0' && c<='9') h=c-'0';
else if(c>='A' && c<='F') h=c-'A'+10;
else if(c>='a' && c<='f') h=c-'a'+10;
else break; // не hex
Показано первые 50% кода (символов: 4513)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.