Библиотеки: JSON

 

JSON:

Serialization and deserialization of the JSON format

Автор: Kuzma Shevelev

 
Automated-Trading:

JSON:

Автор: Kuzma Shevelev

Подскажите почему библиотека отображается только среди русских?
Я думаю, что так ее врят ли кто то заметит и сможет воспользоваться, хотя мне кажется она была бы очень удобна для формирования данных для сетевых запросов

 
Я не смотрел Вашу реализацию, потому, что пользуюсь jAson. Есть ли преимущества в Вашей реализации? Можете дать сравнение?
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
Сериализация и десериализация JSON протокола. Портированный код со скоростной библиотеки С++.
 
Edgar Akhmadeev #:
Я не смотрел Вашу реализацию, потому, что пользуюсь jAson. Есть ли преимущества в Вашей реализации? Можете дать сравнение?

1. Размер, 20кb против 30kb

2. Позволяет Гибко работать с любой JSON структурой
- Есть методы для определения типов значений, что позволяет обрабатывать случаи когда значение может быть разных типов
- Есть методы для получения ключей объекта, что позволяет обрабатывать случаи когда ключи не известны заранее
- Удобный интерфейс библиотеки, делает удобным и понятным процесс заполнения структуры JSON

3. Понятный и человекочитаемый исходный ход
- Позволит в легко вникнуть в работу библиотеки, делая принцип ее работы прозрачным
- Понятная структура работы библиотеки позволит удобно дебажить сетевые запросы и ответы
- Не использует перегрузки операторов, предоставляя методы с понятными названиями, делая код понятным любому разработчику

 
Kuzma Shevelev #:

Подскажите почему библиотека отображается только среди русских?
Я думаю, что так ее врят ли кто то заметит и сможет воспользоваться, хотя мне кажется она была бы очень удобна для формирования данных для сетевых запросов

Потому что кодебейз так сделана (по крайней мере пока) - по-умолчанию код гарантировано регистрируется только в одной языковой версии (вы тоже могли бы это сделать в английской ветке), а перенос на другие языки - только по каким-то условиям (нужно уточнить - автоматически по популярности, по команде модераторов или как-то еще).

Что касается самой темы json, есть еще например  минималистичный вариант реализации toyjson.mqh из алгокниги

Учебник по MQL5: Расширенные средства языка / Проекты / Клиентская программа сигнального сервиса на MQL5
Учебник по MQL5: Расширенные средства языка / Проекты / Клиентская программа сигнального сервиса на MQL5
  • www.mql5.com
Итак, мы решили, что текст в сообщениях сервиса будет в формате JSON. В наиболее распространенном варианте, JSON представляет собой текстовое...
 
Kuzma Shevelev #:

1. Размер, 20кb против 30kb

2. Позволяет Гибко работать с любой JSON структурой
- Есть методы для определения типов значений, что позволяет обрабатывать случаи когда значение может быть разных типов
- Есть методы для получения ключей объекта, что позволяет обрабатывать случаи когда ключи не известны заранее
- Удобный интерфейс библиотеки, делает удобным и понятным процесс заполнения структуры JSON

3. Понятный и человекочитаемый исходный ход
- Позволит в легко вникнуть в работу библиотеки, делая принцип ее работы прозрачным
- Понятная структура работы библиотеки позволит удобно дебажить сетевые запросы и ответы
- Не использует перегрузки операторов, предоставляя методы с понятными названиями, делая код понятным любому разработчику

вот даже решил посмотреть что за " Понятный и человекочитаемый исходный ход" :-)

пункт 3 вычеркивайте нафик - вы как и автор jAson даже и не напрягались писать комментарии и документацию. И с операторами пользователю удобнее и нагляднее, так что их избегание скорее недостаток чем достоинство

 
Stanislav Korotky #:

Потому что кодебейз так сделана (по крайней мере пока) - по-умолчанию код гарантировано регистрируется только в одной языковой версии (вы тоже могли бы это сделать в английской ветке), а перенос на другие языки - только по каким-то условиям (нужно уточнить - автоматически по популярности, по команде модераторов или как-то еще).

Что касается самой темы json, есть еще например  минималистичный вариант реализации toyjson.mqh из алгокниги

я посмотрел, действительно есть, думаю даже очень хороший вариант

Но в любом случае, я думаю что данная библиотека найдет свою аудиторию, которой понравиться реализованный мной интерфейс использования

 
Kuzma Shevelev #:

Подскажите почему библиотека отображается только среди русских?
Я думаю, что так ее врят ли кто то заметит и сможет воспользоваться, хотя мне кажется она была бы очень удобна для формирования данных для сетевых запросов

Что бы ваш код был виден англоязычной аудитории, его нужно выкладывать на англоязычном форуме.

Идём на английский форум.


Переходим в ихнюю кодобазу



Добавляем код


Сейчас, код из одного сегмента форума не копируется автоматически в другой сегмент, это нужно делать самостоятельно.

 

Долгое время пользовался JAson. Теперь решил сравнить скорость работы 3 библиотек, включая ToyJson3 из книги. Как образец json взял ответ Binance на "exchangeInfo" размером 768 Кб. Он при чтении библиотекой из строки парсится целиком, затем я выбираю один символ и считываю все его данные. Результат:

JAson - 122 ms
ToyJson3 - 54 ms
json - 48 ms

К тому же, у json есть не только десериализация, но и сериализация, а она нужна для Binance futures API. Есть ли она в других либах, не знаю, тяжело разбирать чужие коды.

Но я не силён в ООП, и совершенно не понимаю эту конструкцию:

    JSON::Object* json1 = new JSON::Object()
        .setProperty("number", 123456)
        .setProperty("string", "text")
        .setProperty("boolean", true)
        .setProperty("object", new JSON::Object()
            .setProperty("number", 123456)
            .setProperty("string", "text")
            .setProperty("boolean", true)
            .setProperty("array", new JSON::Array())
        )
        .setProperty("array", new JSON::Array()
            .add(true) // boolean
            .add(123456) // number
            .add("string") // string
            .add(new JSON::Object()
                .setProperty("number", 123456)
                .setProperty("string", "text")
            )
            .add(new JSON::Array()
                .add(true)
                .add(123456)
                .add("string")
            )
        );

    string exampleText = json1.toString();
 
Справедливости ради, ToyJson3 тоже буду изучать - там проведена работа по экономии памяти, это важно.
 
Edgar Akhmadeev #:
совершенно не понимаю эту конструкцию
Не смотрел код библиотеки, но судя по представленному Вами фрагменту, методы setProperty и Add возвращают ссылку на объект (this), поэтому дальше можно снова через точку обратиться к методу класса.  Это позволяет собирать такие цепочки вызовов.