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

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

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

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

#1

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

==== "JSON" ====

JSON с помощью FLProg.
Блок для создания документа формата json.
Строка "JSON" блоком без библиотек.
Распарсить "JSON".
БиблиотекиПоказать
Библиотека ArduinoJson ver 6.17.2 используется из дистрибутива FLProg 7.3.3
Находится в директории: диск:\FLProg_7.3.3\ideV6\portable\sketchbook\libraries\ArduinoJson
Блоки проверены в работе с новой версией ArduinoJson ver 6.17.3
В теме рассматриваются аспекты связанные с программой FLProg.
Win10-64, FLProg (portable)

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

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

#2

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

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

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

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

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

#3

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

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

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

С помощью этого ПБ можно вставлять в строку одномерные - двумерные объекты, массивы, массивы 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 КБ) 22 скачивания
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
Полковник
Сообщения: 1983
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 220
Имя: Владимир

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
Полковник
Сообщения: 1983
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 220
Имя: Владимир

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
Полковник
Сообщения: 1983
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 220
Имя: Владимир

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 КБ) 784 просмотра
это надпись в другом проекте
2021_02_27_10_40_16_FLProg_7.3.3.png
2021_02_27_10_40_16_FLProg_7.3.3.png (5.7 КБ) 784 просмотра
это эффект после копирования
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
Полковник
Сообщения: 1983
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 220
Имя: Владимир

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

#10

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

Распарсить "JSON".

Блок, для извлечения данных из строки формата JSON.
В качестве примера запрашиваются Json строки c веб серверов.
Выбираются в них нужные данные и передаются в UART.
Описание в блоках и проекте.
Распарсить JSON.zip
(68.43 КБ) 25 скачиваний
ESP32
flp 7.3.3
Win10-64, FLProg (portable)

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

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

#11

Сообщение rw6cm » 11.03.2021{, 18:34}

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

Qwert855
Сержант
Сообщения: 110
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 3
Имя: Alex

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

#12

Сообщение Qwert855 » 14.03.2021{, 17:30}

Првет, всем.
На новой json делал кто то информер погоды?
Существующие коды в сети работают только с 5хххх

Так же просьба.
Помогите подружить блок get запроса погоды и espui
Есть конфликт , вероятно в буфере.
Оба блока хотят буфер json.

rogekam
Рядовой
Сообщения: 47
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 13
Откуда: RUS31
Имя: Egor

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

#13

Сообщение rogekam » 14.03.2021{, 18:56}

Qwert855 писал(а):
14.03.2021{, 17:30}
Првет, всем.
На новой json делал кто то информер погоды?
Существующие коды в сети работают только с 5хххх

Так же просьба.
Помогите подружить блок get запроса погоды и espui
Есть конфликт , вероятно в буфере.
Оба блока хотят буфер json.
Здесь выложил пользовательский блок - информер погоды: viewtopic.php?f=71&t=7193#p100957
на новой JSON 6 версии, дружит с ESPUI.

Qwert855
Сержант
Сообщения: 110
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 3
Имя: Alex

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

#14

Сообщение Qwert855 » 14.03.2021{, 19:17}

rogekam писал(а):
14.03.2021{, 18:56}
Qwert855 писал(а):
14.03.2021{, 17:30}
Првет, всем.
На новой json делал кто то информер погоды?
Существующие коды в сети работают только с 5хххх

Так же просьба.
Помогите подружить блок get запроса погоды и espui
Есть конфликт , вероятно в буфере.
Оба блока хотят буфер json.
Здесь выложил пользовательский блок - информер погоды: viewtopic.php?f=71&t=7193#p100957
на новой JSON 6 версии, дружит с ESPUI.
спасибо

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей