ArduinoJSON — как проверить, пуст ли массив
Файл параметров определяет создание объектов и сохраняется во флэш-памяти. Дана его структура и все поля (ключи и значения).
На текущем этапе эти параметры жестко закодированы в const char* cont_params
, как показано ниже.
Моя цель, когда массив пуст, например, RF_2entity
- означает, что текущий MCU не использует свои возможности RF и не будет инициировать какие-либо объекты RF. Способ, которым RF_2entity
определен ниже, как пустой массив, []
, функция ArduinoJSON isNull()
возвращает 0
в тот случай.
Как я могу сохранить структуру и логику файла параметров, а не заполнять его значениями, например, 255
.
Serial.begin(115200);
StaticJsonDocument<1200> doc;
const char *cont_params = "{\"entityType\": [1,1,1,1],\
\"SWname\": [\"SW_0\",\"SW_1\",\"SW_2\",\"SW_3\"],\
\"SW_buttonTypes\": [2,1,1,1],\
\"SW_timeout\": [10,11,12,13],\
\"SWvirtCMD\":[0,0,0,0],\
\"Winname\": [],\
\"WextInputs\": [],\
\"WinvirtCMD\":[],\
\"RF_2entity\": [],\
\"v_file\": 0.5}";
DeserializationError err = deserializeJson(doc, cont_params);
JsonArray array = doc["Winname"].as<JsonArray>();
serializeJsonPretty(array,Serial);
Serial.println(array.isNull());
вывод:
[]0
@Guy . D, 👍1
Обсуждение1 ответ
Лучший ответ:
Метод isNull()
— это не то, что вам нужно. Он сообщает вам, содержит ли экземпляр массив вообще или нет. И, конечно же, ваш конкретный экземпляр содержит массив, хотя и пустой. Поэтому метод корректно возвращает false
, также известный как 0
.
Как показывает документация по API, существует больше методов, которые можно использовать.
Что вам нужно, так это size()
, который возвращает количество элементов в массиве. Он даже вернет 0
для экземпляра без массива.
в этом случае doc["Winname"].size()
будет достаточно. Мне действительно не нужно использовать массив., @Guy . D
- Возможно ли иметь массив массивов int?
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Инициализация массива структур
- Невозможно создать массив типа const char*
- Работает ли конструкция int array[100] = {0} на Arduino?
- Массив динамического размера в качестве члена класса
- Длина константного массива uint8_t*
- Получение шестнадцатеричных данных с терминала
извините, но я не понимаю вопроса. в чем проблема? isNull() вернул 0 (ложь), а не 1 (истина), @Juraj
@Juraj - Вопрос отредактирован. вы правы...
isNull()
возвращает, что массив не пуст., @Guy . D