Библиотеки: JSON Serialization and Deserialization (native MQL) - страница 14
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Библиотека очень полезная. Но столкнулся с тем, что при сериализации значений типа double происходит сильная потеря точности.
Пример:
double minutes_open[] = {0.95347, 0.95317, 0.95324}
for (int i=0; i<ArraySize(minutes_open); ++i) jv["minutes_open"].Add(minutes_open[i]);
После сериализации получаю:
"minutes_open":[9.53e-01,9.53e-01,9.53e-01]
Т.е. последние 2 значащих знака просто потеряны и все значения в массиве стали попросту равны друг другу. В результате все расчеты на основе этих данных идут прахом...
В итоге обошел это преобразованием значений массива в string.
Привет!
Документация по библиотеке JAson на этом сайте не полная. Я написал документацию более подробно и добавил юнит-тесты: https://github.com/vivazzi/JAson. Возможно, кому-то это будет полезно.
Добавлю, что я создал проблему, в которой описана ошибка использования внутреннего Json (объект CJAVal): https://github.com/vivazzi/JAson/issues/1.
Объект CJAVal некорректно присваивается другому объекту CJAVal в качестве объекта:
В качестве обходного пути необходимо использовать метод Set():
Если кто-то сможет помочь, то многие MQL-разработчики будут благодарны, так как эта ошибка существует уже много лет.
Всем привет!
Документация JAson не полная на этом сайте, и я написал более подробную документацию https://github.com/vivazzi/JAson/, а также добавил юнит-тесты: может быть кому-нибудь будет это полезно.
И я описал проблему использования вложенного Json (CJAVal объекта): https://github.com/vivazzi/JAson/issues/1.
CJAVal объект не корректно сохраняется, если использовать знак "=" (сохраняется пустой ключ):
Да, в тестах, прилагаемом на странице библиотеки на этом сайте, можно найти, что нужно использовать метод Set():
Но если кто-нибудь сможет поправить библиотеку так, чтобы можно было сохранять вложенные Json структуры через знак "=", то это бы очень помогло многим. Так как я заметил, что некоторые думают, что библиотека имеет ошибки, когда пытаются присвоить вложенный CJAVal обычным способом через "=".
Надеюсь, это вообще возможно в рамках MQL языка. Я сам пробовал поправить, но у меня нет глубоких знаний языка MQL, и пока не получилось сделать присваивание через "=".
Привет!
Документация по библиотеке JAson на этом сайте не полная. Я написал документацию более подробно и добавил юнит-тесты: https://github.com/vivazzi/JAson. Возможно, кому-то это будет полезно.
Добавлю, что я создал вопрос, в котором описана ошибка использования внутреннего Json (объект CJAVal): https://github.com/vivazzi/JAson/issues/1.
Объект CJAVal некорректно присваивается другому объекту CJAVal в качестве объекта:
В качестве обходного пути необходимо использовать метод Set():
Если кто-то сможет помочь, то многие MQL-разработчики будут благодарны, так как эта ошибка существует уже много лет.
Проблема заключается в методе Copy.
Ключ перезаписывается ключом подобъекта, в вашем примере ключ "b" перезаписывается ключом "nested_data", который пуст.
Я использовал это простое решение, не до конца протестированное:
Спасибо, Laszlo Tormasi - ваше исправление работает, и все тесты пройдены!
Я обновил JAson с вашими исправлениями: https://github.com/vivazzi/JAson
Проблема присваивания вложенных Json структур через знак "=" была решена Laszlo Tormasi в комментарии https://www.mql5.com/en/forum/65320/page3#comment_21453129.
Версия JAson с правками на https://github.com/vivazzi/JAson
Спасибо всем, кто пытался разобраться в проблеме и помочь!
Исправил ошибку ("array out of range"), которая возникала при отрицательных индексах массива. Теперь оператор [] возвращает NULL.
Обработка выглядит так.
Также, добавил метод ToIntI, для удобства. Поскольку, ToInt возвращает long.
Не пойму, как nested json прочитать.
Вот есть строка вида:
string str= { "key1": [ { "key2": [ { "key3": "val)" }, {}, {} ] } ] }И как её прочитать и получить доступ к элементам?
Как только не пытался - не получается.Не пойму, как nested json прочитать.
Вот есть строка вида:
И как её прочитать и получить доступ к элементам?
Как только не пытался - не получается.string str; CJAVal data; str= "{" " \"key1\": [" " {" " \"key2\": [" " {" " \"key3\": \"val)\"" " }," " {}," " {}" " ]" " }" " ]" "}"; data.Deserialize(str); Print(data["key1"][0]["key2"][0]["key3"].ToStr());Если плохо понимаете структуру вашей json строки или что-то идёт не так, то делайте следующим образом:
Чтобы легко понять структуру json строки пользуйтесь этим сайтом: https://jsoneditoronline.org/