← К каталогу
Исходный код · ID 3547

json.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Библиотека json.mqh представляет собой набор двух классов для работы с JSON и HTML-тегами в среде MQL. Основной класс JSON обеспечивает разбор JSON-строк, извлечение именованных полей, а также преобразование извлечённых значений в различные типы данных. Класс CTag предоставляет утилиты для поиска и извлечения содержимого между произвольными шаблонными маркерами в строках, в том числе для работы с HTML-тегами.

Состав библиотеки

Классов: 2 · методов: 11 · конструкторов: 1 · деструкторов: 2 · отдельных функций: 0

Классы
Класс class JSON

Основной класс для работы с JSON-данными: парсинг, экранирование и преобразование значений.

Класс class CTag

Основной класс для поиска и извлечения содержимого между шаблонными тегами в строке.

Методы и конструкторы
Деструктор · JSON ~JSON()

Деструктор класса JSON.

Метод · JSON string value()

Возвращает сохранённое строковое значение после парсинга.

Метод · JSON double getDouble()

Преобразует сохранённое значение в число с плавающей запятой.

Метод · JSON int getInteger()

Преобразует сохранённое значение в целое число.

Метод · JSON datetime getDatetime()

Преобразует сохранённое значение в дату и время.

Метод · JSON string getUnicode()

Возвращает строку с восстановленными Unicode-символами после расшифровки JSON-экранирования.

Метод · JSON string Escape(string a)

Экранирует специальные символы строки для корректного представления в JSON.

Метод · JSON string Unescape(string a)

Восстанавливает исходные символы из JSON-экранированной строки, включая Unicode-последовательности.

Метод · JSON bool parse(string name,string &sBuffer)

Извлекает значение указанного именованного поля из JSON-строки и сохраняет его для дальнейшего доступа.

Конструктор · CTag CTag()

Конструктор класса CTag, создающий пустой объект.

Деструктор · CTag ~CTag()

Деструктор класса CTag.

Метод · CTag string GetTag(string &sbuffer,int &istartend,string startPattern,string endPattern,bool bExclude)

Ищет в буфере участок между начальным и конечным шаблонами и возвращает извлечённую подстроку с возможностью исключения самих шаблонов.

Метод · CTag string GetText(string stag)

Извлекает текстовое содержимое из HTML-тегов, определяя его как то, что находится между символами '>' и '<'.

Метод · CTag 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 и перейдите к оплате.

Стоимость полного кода
451,30₽ ≈ $5.52