Обсуждение статьи "Осваиваем JSON: Разработка пользовательского JSON-ридера с нуля на MQL5"

 

Опубликована статья Осваиваем JSON: Разработка пользовательского JSON-ридера с нуля на MQL5:

В статье приведено пошаговое руководство по созданию пользовательского парсера JSON на языке MQL5, включающего обработку объектов и массивов, проверку ошибок и сериализацию. Вы сможет объединить торговую логику и структурированные данные с помощью гибкого решения для обработки JSON в MetaTrader 5.

В этой статье мы постараемся восполнить этот пробел, показав, как создать собственный JSON-ридер на языке MQL5. По ходу дела мы изучим основные концепции анализа JSON и рассмотрим создание гибкой структуры классов, способной обрабатывать различные типы элементов JSON (такие как объекты, массивы, строки, числа, логические значения и значения NULL). Наша конечная цель — предоставить возможность удобно анализировать строки JSON и получать доступ к данным в них или изменять их, и все это в удобной среде MetaTrader 5.

Мы будем следовать структуре, похожей на ту, что мы видели в других статьях, связанных с MQL5, но с упором именно на анализ и использование JSON. Статья будет разделена на пять основных разделов: введение (то, что вы читаете сейчас), более глубокое погружение в основы JSON и его применение в MQL5, пошаговое руководство по созданию базового парсера JSON с нуля, исследование расширенных функций обработки JSON и, наконец, полный листинг кода и заключительные мысли.


Автор: Sahil Bagdi

 
О, ещё одна. Кажется, пятая.
Что ж, руки дойдут, сделаю сравнительный бенчмарк.
 

Сравнил скорость работы 4 библиотек, включая ToyJson3 из  MQL5Book. Как образец json взял ответ Binance на "exchangeInfo" размером 768 Кб. Он при чтении библиотекой из строки парсится целиком, затем я выбираю один символ и считываю все его данные. В цикле 100 раз.

MetaTrader 5 x64 build 5370 started for MetaQuotes Ltd.
Windows 10 build 19045, 4 x AMD Ryzen 3 PRO 3200GE w/ Radeon Vega, AVX2, 6 / 13 Gb memory, 241 / 427 Gb disk, UAC, GMT+3
cpu='AVX2 + FMA3'

Результат (время обработки запроса):

99.5 ms - JAson 1.12 (https://www.mql5.com/ru/code/13663)

85.5 ms - JAson 1.13

46.9 ms - ToyJson3 (https://www.mql5.com/ru/forum/459079/page4#comment_57805801)

41 ms - JSON (https://www.mql5.com/ru/code/53107)

1132 ms - JsonNode (данная библиотека)

38 ms - моя реализация на основе JSON

PS: Когда-то здесь, кажется, всплывала ещё одна, очень урезанная, библиотека. Но я потерял следы.

PPS: Скрипт для замера не публикую. Код в совершенно неприглядном виде.

 
Edgar Akhmadeev #:

Я сравнил скорость работы 4 библиотек, включая ToyJson3 из MQL5Book. В качестве образца json я взял ответ Binance на запрос "exchangeInfo" размером 768 Кб. Когда библиотека считывает его из строки, он разбирается целиком, затем я выбираю один символ и считываю все его данные. В цикле 100 раз.

Результат (время обработки запроса):

99,5 мс - JAson 1.12(https://www.mql5.com/ru/code/13663)

85,5 мс - JAson 1.13

46,9 мс - ToyJson3 (https://www.mql5.com/ru/forum/459079/page4#comment_57805801)

41 мс - JSON(https://www.mql5.com/ru/code/53107)

1132 мс - JsonNode (эта библиотека)

38 мс - моя реализация на основе JSON

PS: Когда-то здесь всплывала другая, очень урезанная, библиотека. Но я потерял ее из виду.

PPS: Я не публикую скрипт для измерения. Код находится в совершенно неприглядном виде.

Не могли бы вы выложить json-строку или файл, пожалуйста?
 
Alain Verleyen #:
Не могли бы вы выложить json-строку или файл, пожалуйста?

https://fapi.binance.com/fapi/v1/exchangeInfo

https://eapi.binance.com/eapi/v1/exchangeInfo

778 КБ (796 729 байт)

 
Alain Verleyen #:
Не могли бы вы выложить json-строку или файл, пожалуйста?
Вот копия строки, полученной программно из API.
Файлы: