Библиотеки: JSON Serialization and Deserialization (native MQL) - страница 16

 

Вы уже знаете пример с обращением к WebRequest() - и как он превращает загруженные данные в нечто читабельное?

Только после этого вы сможете проанализировать текст Джейсона.

Dokumentation zu MQL5: Netzwerkfunktionen / WebRequest
Dokumentation zu MQL5: Netzwerkfunktionen / WebRequest
  • www.mql5.com
WebRequest - Netzwerkfunktionen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Carl Schreiber #:

Вы уже знаете пример с обращением к WebRequest() - и как он превращает загруженные данные в нечто читаемое?

Только после этого вы сможете проанализировать текст Джейсона.

Хорошо, я немного изменил его. Это уже очень помогло мне.

Сообщение через печать гласит:

2022.12.21 20:20:48.718 jason_test (GER40,H1) Файл был успешно загружен, размер 17 байт.

Что для меня означает, что есть ответ от сервера, который я должен как-то проанализировать. И был создан файл под названием url, который, собственно, и содержит ответ, который я искал.

Спасибо, Карл, за помощь
 

Вы можете обновить Добавить некоторые функции любит

JAval j1; j1.Add(1);
j1["a"] = 1;
j1["b"] = 2;


Вы можете добавить эту функцию?

j1.Del("a");
j1.Pop();
j1.shift();
j1.sort();
j1.sort();
 

После очередного обновления перестала работать. В логе - номера строк с ошибками

Билд 3756.

 

Есть вот такая структура

[

   {

      "ticket":671073362

   },

   {

      "ticket":111111111

   }

]


Хочу получить 2 элемента. И первый тикет, и второй.

string js = "{\"ticket\":671073362\"},{\"ticket\":111111111}";

jv.Deserialize(js);

Print( jv["ticket"].ToStr());

Так получаю доступ только к первому. Как получить доступ ко второму и последующим, если будут?

Эта проблема обсуждалась здесь  https://www.mql5.com/ru/forum/63015/page3#comment_2844920 , но там автор подобную структуру обернул в именованный массив, наподобие

string js = "{\"array\":[{\"ticket\":671073362},{\"ticket\":111111111}]}";

jv.Deserialize(js);

for(int i = 0; i < ArraySize(jv["array"].m_e); i++)
   {
      Print(jv["array"].m_e[i]["ticket"].ToInt());
   }

так все находится. но что делать, если я не могу изменить структуру json? Как получить этот массив и пройтись по элементам?

 
Nikita Chernyshov #:

Есть вот такая структура

[

   {

      "ticket":671073362

   },

   {

      "ticket":111111111

   }

]

...

Указанная строка не соответствует приведенной в начале структуре и не является корректным json-ом:

string js = "{\"ticket\":671073362\"},{\"ticket\":111111111}";

Должна быть:

string js = "[{\"ticket\":671073362},{\"ticket\":111111111}]";

Это замечание - только по спецификации json-а, безотносительно к тому, как он реализован в конкретной библиотеке. Я использую другую.

 
Stanislav Korotky #:

Указанная строка не соответствует приведенной в начале структуре и не является корректным json-ом:

Должна быть:

Это замечание - только по спецификации json-а, безотносительно к тому, как он реализован в конкретной библиотеке. Я использую другую.

ну это да, там не хватает квадратов, но с ними не помогает)

[Удален]  
Слишком много аргументов для функции-макроса 'DEBUG_PRINT_KEY' JAson.mqh 391 40
if (type != jtUNDEF) { DEBUG_PRINT_KEY(); return false; }  // если значение уже имеет тип, то это ошибка

см. объявление макроса 'DEBUG_PRINT_KEY' JAson.mqh

#ifdef  DEBUG
    #define  DEBUG_PRINT_KEY() Print(key+" "+string(__LINE__))
#else
    #define  DEBUG_PRINT_KEY()
#endif

Это предупреждение появляется при последней компиляции mql5.

Есть идеи, как исправить?

 
Arpit T #:
Есть идеи, как исправить?

Уберите скобки

if (type != jtUNDEF) { DEBUG_PRINT_KEY; return false; }  // если значение уже имеет тип, то это ошибка
#ifdef  DEBUG
    #define  DEBUG_PRINT_KEY Print(key+" "+string(__LINE__))
#else
    #define  DEBUG_PRINT_KEY
#endif
[Удален]  
Manuel Alejandro Cercos Perez #:

Уберите скобки

исправлено, спасибо

Я прикрепляю исправленный код здесь

Файлы:
JAson_1.13.mqh  45 kb