Страница 1 из 3

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

Добавлено: 23 фев 2021, 01:13
rw6cm
==== "JSON" ====

JSON с помощью FLProg.
Блок для создания документа формата json.
Строка "JSON" блоком без библиотек.
Распарсить "JSON".

[spoiler title=Библиотеки]
Библиотека ArduinoJson ver 6.x.x используется из дистрибутива FLProg
Находится в директории: диск:\FLProg_x.x.x\ideVx\portable\sketchbook\libraries\ArduinoJson
Блоки проверены в работе с ArduinoJson ver 6.17.3
[/spoiler]

В теме рассматриваются аспекты связанные с программой FLProg.

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

Добавлено: 23 фев 2021, 01:13
rw6cm
JSON в программе FLProg.

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

[/spoiler]
Пример сборки строки json в флп.flp
flp7.3.3

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

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

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

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

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

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

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

В блоке есть краткое описание. Также есть пояснения в примере проекта.
остальное допишу исходя из ваших вопросов.
[/spoiler]
Создать json с помощью блока.zip
flp7.3.3

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

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

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

Добавлено: 26 фев 2021, 13:37
rw6cm
Строка "JSON" блоком без библиотек.

Блок в этом примере не использует библиотек.
В нем не надо рассчитывать размер json, как в предыдущем варианте.
Он более гибок, имеет больше возможностей, и занимает меньше памяти.
[spoiler]
str_json.png
[/spoiler]
Строка json с блоком без библиотек.zip

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

Добавлено: 26 фев 2021, 13:38
rw6cm
резерв

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

Добавлено: 26 фев 2021, 21:50
vladimirle
[ref=#ff8000]rw6cm[/ref], Шикарная реализация в новом редакторе! Большое спасибо!

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

Добавлено: 27 фев 2021, 11:05
rw6cm
Обнаружил странный глюк в флп 7.3.3
Относится это к посту №5 В нем я обновил сейчас проект в котором был глюк.
От чего он происходит.
[spoiler]
Если скопировать любую надпись с другого проекта сделанного в флп 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
[/spoiler]
Вот так... собирал проект, чтобы заново не набирать, скопировал с аналогичного проекта безобидные надписи.
сохранил, сегодня открываю а он не рабочий :D весело! :)

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

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

Добавлено: 28 фев 2021, 20:36
JonyBest
Спасибо! Отлично получилось.
А обратное декодирование планируется создать?

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

Добавлено: 01 мар 2021, 04:27
rw6cm
Распарсить "JSON".

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

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

Добавлено: 11 мар 2021, 18:34
rw6cm
резерв

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 14 апр 2021, 12:23
rw6cm
demonkol писал(а): 14 апр 2021, 11:48 как в примере ниже с "brightness": true без кавычек
true это не текст, а boolean данные.
в Json текст может быть только в кавычках.

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

Добавлено: 14 апр 2021, 12:32
demonkol
Если я выбираю в настройках булеан то вместо true выводиться 1. А как чтобы именно true выводилось?

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

Добавлено: 14 апр 2021, 12:45
rw6cm
demonkol писал(а): 14 апр 2021, 12:32 выбираю в настройках булеан то вместо true выводиться 1
true=1, false=0 по сути для С++ это одно и тоже.
Это может быть критично, если передавать эти данные на сайт, с автоматическим определением типа данных.
Типа онлайн конвертеры, ассистенты итд. Они с большой вероятностью определят это как int.
А для сайтов настроенных на прием булеан данных это не критично.
сделал булеан в виде true false
true false.zip
flp7.3.5

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

Добавлено: 17 янв 2022, 20:39
DrScorpion86
[ref=#ff8000]rw6cm[/ref],
Подскажите, пожалуйста, Как собрать массив для записи в переменную и вывести её на новый веб интерфейс?
Хочу дальше обработать ее в JS и сформировать нужные данные.
Понимаю, что где-то в блоке надо добавить "обратный слэш", но где :smile469:

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

Добавлено: 17 янв 2022, 23:39
rw6cm
DrScorpion86 писал(а): 17 янв 2022, 20:39 собрать массив для записи в переменную и вывести её на новый веб интерфейс?
Еще не пробовал новый интерфейс. Пока сказать не могу.