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

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

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

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

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 библиотеку (экономим ресурсы), передаем данные в json формате,
которые будут разобраны json инструментами, но уже на стороне браузера.
Если нужно передавать структурированные данные, где много объектов массивов да еще вложенных друг в друга, собрать таким методом строку и не запутаться в кавычках скобках и тд будет сложно. А если что то надо добавить или передвинуть – это по сути все заново.
Пример сборки строки json в флп.flp
flp7.3.3
Для скачивания вложений Вы должны быть зарегистрированы.
Win10-64, FLProg (portable)

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

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
flp7.3.3
Для скачивания вложений Вы должны быть зарегистрированы.
Win10-64, FLProg (portable)

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

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

#4

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

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

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

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

#5

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

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

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

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

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

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_40_16_FLProg_7.3.3.png
это эффект после копирования
2021_02_27_10_41_36_Строка_json_с_блоком_без_библиотек.png
Вот так... собирал проект, чтобы заново не набирать, скопировал с аналогичного проекта безобидные надписи.
сохранил, сегодня открываю а он не рабочий :D весело! :)

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

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

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

#9

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

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

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

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

#10

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

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

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

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

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

#11

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

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

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

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

#12

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

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

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

rogekam
Рядовой
Сообщения: 55
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 17
Откуда: 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
Сержант
Сообщения: 125
Зарегистрирован: 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.
спасибо

demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06.09.2015{, 08:29}
Репутация: 0

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

#15

Сообщение demonkol » 14.04.2021{, 11:48}

А возможно ли сделать чтобы можно было выбирать текст в кавычках или без? Иногда нужно, как в примере ниже с "brightness". true без кавычек.
{
"~": "homeassistant/light/kitchen",
"name": "Kitchen",
"unique_id": "kitchen_light",
"cmd_t": "~/set",
"stat_t": "~/state",
"schema": "json",
"brightness": true
}

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

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

#16

Сообщение rw6cm » 14.04.2021{, 12:23}

demonkol писал(а):
14.04.2021{, 11:48}
как в примере ниже с "brightness": true без кавычек
true это не текст, а boolean данные.
в Json текст может быть только в кавычках.
Win10-64, FLProg (portable)

demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06.09.2015{, 08:29}
Репутация: 0

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

#17

Сообщение demonkol » 14.04.2021{, 12:32}

Если я выбираю в настройках булеан то вместо true выводиться 1. А как чтобы именно true выводилось?

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

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

#18

Сообщение rw6cm » 14.04.2021{, 12:45}

demonkol писал(а):
14.04.2021{, 12:32}
выбираю в настройках булеан то вместо true выводиться 1
true=1, false=0 по сути для С++ это одно и тоже.
Это может быть критично, если передавать эти данные на сайт, с автоматическим определением типа данных.
Типа онлайн конвертеры, ассистенты итд. Они с большой вероятностью определят это как int.
А для сайтов настроенных на прием булеан данных это не критично.
сделал булеан в виде true false
true false.zip
flp7.3.5
Для скачивания вложений Вы должны быть зарегистрированы.
Win10-64, FLProg (portable)

Ответить

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