Уважаемые пользователи! Наш сайт и форум содержится на средства полученные от рекламы. Если вы хотите и дальше продолжать общаться, скачивать, и т.п. пожалуйста отключите блокировку рекламы для нашего сайта/форума. Можно и покликать по рекламным ссылкам, так будут больше выплаты. Спасибо за понимание!

JSON в программе FLProg.

Тема для людей, кто уже имеет представление о json

Ответить
Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#1

Сообщение rw6cm » 23.02.2021{, 01:13}

Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#2

Сообщение rw6cm » 23.02.2021{, 01:13}

JSON в программе FLProg.

JSON это формат обмена данными. Удобен в визуальном восприятии, есть необходимый инструментарий,
поддерживают почти все языки, и есть библиотеки для ардуино.
Если надо передавать много структурированных данных - это для JSON.
Информации о JSON в интернете много. Здесь будем рассматривать аспекты связанные с программой FLProg .
ОписаниеПоказать
Представим, что нам надо передать данные в виде объектов json.
Объект, это форма записи в строке, в виде {“имя_объекта” : его данные}
имена в пределах одной директории должны быть разные {“имя1”:данные, “имя2”:данные, “имя3”:данные}
все имена заключены в двойные кавычки.
Разделение между именем и данными знак ” : “
разделение между объектами знак “,”
начало и конец json - фигурные скобки { }.
Данные могут быть цифровыми (сюда относится любой цифровой тип С++), булевы (0,1, true, false), и строчные.
Рассмотрим пример, как собрать строку json в флп.
Из того что есть в флп подходит только блок сложения строк. Придется собирать строку по кусочкам.
Но здесь сразу сталкиваемся с первой неприятностью. В строчном формате С++ не допустимы подряд сдвоенные кавычки.
С++ метит строки своими двойными кавычками, вместе с нашими получаются по две подряд.
Чтобы это обойти, межу ними ставим экранировку, знак “\” (он не будет отображаться в строке после конвертации)
Вторая неприятность, что все данные будут только строчные т.к. блоки только для строк. Это не обойти.
Выглядит так:
строка json FLProg_7.3.3.png
строка json FLProg_7.3.3.png (6.26 КБ) 677 просмотров
Как это будет выглядеть в веб проекте - пример в соседней ветке
Этот вариант подойдет для передачи не больших объемов данных в веб браузер .
Плюс здесь в том, что мы, не используя ардуино json библиотеку (экономим ресурсы), передаем данные в json формате,
которые будут разобраны json инструментами, но уже на стороне браузера.
Если нужно передавать структурированные данные, где много объектов массивов да еще вложенных друг в друга, собрать таким методом строку и не запутаться в кавычках скобках и тд будет сложно. А если что то надо добавить или передвинуть – это по сути все заново.
Пример сборки строки json в флп.flp
(128.4 КБ) 14 скачиваний
flp7.3.3
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#3

Сообщение rw6cm » 23.02.2021{, 01:14}

В этом году, свободное зимнее время, посвятил изучению нового редактора ПБ и json формату.
Решил выложить на пробу свой первый блок, заодно закрепить в памяти полученные знания.

Блок для создания документа формата json.

Использует библиотеку ArduinoJson из дистрибутива FLProg 7.3.3
С помощью этого ПБ можно вставлять в строку одномерные - двумерные объекты, массивы, массивы FLProg.
Есть возможность вставлять другие строки формата json.
Знакомство с блокомПоказать
Назначение блока зависит от выбранной позиции в настройке блока.
Чтобы создать строку json, нужен блок начала документа и блок конец документа.
Между ними вставляются в нужной последовательности, блоки объектов и массивов.
В настройке начального блока выставляем:

1. Имя документа json.
Значение по умолчанию – myDocJson
Для собираемой строки имя в ее блоках должно быть одно.
Если нужна не одна строка, имя в блоках другой строки должно быть другим.
Имена присваивать по правилам переменных С++

2. Свойство документа json.
Значение по умолчанию – статичное
Статичное – это когда у нас определенное количество объектов, массивов, и размер изменяется не в больших пределах.
Это режим работает быстрее, в нем не нужна фрагментации памяти. Этот выбор самый оптимальный.
Динамичное - это когда у нас нет постоянного количества объектов, массивов.
В какой то момент их может быть мало, в какой то очень много.
Допустим вставляем строки с разными списками, (список файлов CD),
он может быть пустым, а может и 100500 наименований.
В этом выборе скорость работы будет меньше, за счет постоянной фрагментации памяти.

3. Размер документа json.
Примерное значение, это сумма максимально возможных символов в строке + небольшой запас.
Более точнее можно узнать на сайте: https://arduinojson.org/v6/assistant/
Для этого вставляем в размер число с большим запасом,
вводим во все изменяемые позиции строки максимально возможные значения (по количеству символов).
Выводим строку в терминал. Копируем и вставляем на сайте. Получаем точный размер.
Если данные не константы, убираем в открывающей опции Tweaks в 3 разделе (Size) на сайте,
с пункта Assume keys are const char* галочку, и смотрим размер.

В блоке есть краткое описание. Также есть пояснения в примере проекта.
остальное допишу исходя из ваших вопросов.
Создать json с помощью блока.zip
(357.7 КБ) 9 скачиваний
flp7.3.3
Win10-64, FLProg (portable)

JonyBest
Рядовой
Сообщения: 63
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 2
Откуда: Близко к Ставрополю
Имя: Евгений

JSON в программе FLProg.

#4

Сообщение JonyBest » 23.02.2021{, 20:44}

Люто плюсую за поднятие очень полезной темы! JSON формат передачи данных очень много используется в системах домашней автоматизации. Если сможете реализовать интуитивный блок для работы с JSON форматом - это будет очень полезно. Если использовать блок сложения строк при большом кол-ве данных, то схема получается громоздкой и тяжело читаемой. Запутаться очень легко... Вот кусок моего примера формирования конфига для Home Assistant.
j.JPG

Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#5

Сообщение rw6cm » 26.02.2021{, 08:13}

Строка "JSON" блоком без библиотек.

Блок в этом примере не использует библиотек.
В нем не надо рассчитывать размер json, как в предыдущем варианте.
Он более гибок, имеет больше возможностей, и занимает меньше памяти.
СпойлерПоказать
str_json.png
Последний раз редактировалось rw6cm 27.02.2021{, 11:08}, всего редактировалось 1 раз.
Причина: заменил из за глюка
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#6

Сообщение rw6cm » 26.02.2021{, 13:38}

резерв
Win10-64, FLProg (portable)

vladimirle
Рядовой
Сообщения: 16
Зарегистрирован: 27.12.2015{, 19:25}
Репутация: 0
Откуда: Москва
Имя: Владимир

JSON в программе FLProg.

#7

Сообщение vladimirle » 26.02.2021{, 21:50}

rw6cm, Шикарная реализация в новом редакторе! Большое спасибо!

Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#8

Сообщение rw6cm » 27.02.2021{, 11:05}

Обнаружил странный глюк в флп 7.3.3
Относится это к посту №5 В нем я обновил сейчас проект в котором был глюк.
От чего он происходит.
СпойлерПоказать
Если скопировать любую надпись с другого проекта сделанного в флп 7.3.3 и вставить в проект поста 5 на плату 2
происходит дублирование массивов flprog которые имеют свои блоки в проекте.
как это может быть связано хз :shok: :smile37: :smile390:

это до копирования
2021_02_27_10_36_43_Строка_json_с_блоком_без_библиотек.png
2021_02_27_10_36_43_Строка_json_с_блоком_без_библиотек.png (11.43 КБ) 244 просмотра
это надпись в другом проекте
2021_02_27_10_40_16_FLProg_7.3.3.png
2021_02_27_10_40_16_FLProg_7.3.3.png (5.7 КБ) 244 просмотра
это эффект после копирования
2021_02_27_10_41_36_Строка_json_с_блоком_без_библиотек.png
Вот так... собирал проект, чтобы заново не набирать, скопировал с аналогичного проекта безобидные надписи.
сохранил, сегодня открываю а он не рабочий :D весело! :)

п/с Если после этого зайти в массивы , и перейти на временно созданные новые, а потом назад, то глюк исчезает, и проект рабочий )))
Win10-64, FLProg (portable)

JonyBest
Рядовой
Сообщения: 63
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 2
Откуда: Близко к Ставрополю
Имя: Евгений

JSON в программе FLProg.

#9

Сообщение JonyBest » 28.02.2021{, 20:36}

Спасибо! Отлично получилось.
А обратное декодирование планируется создать?

Аватара пользователя
rw6cm
Полковник
Сообщения: 1950
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 207
Имя: Владимир

JSON в программе FLProg.

#10

Сообщение rw6cm » 01.03.2021{, 04:27}

JonyBest писал(а):
28.02.2021{, 20:36}
А обратное декодирование планируется создать?
надеюсь до теплых дней успеть ))
Win10-64, FLProg (portable)

Ответить

Вернуться в «Букварь»