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

, 👍1

Обсуждение

извините, но я не понимаю вопроса. в чем проблема? isNull() вернул 0 (ложь), а не 1 (истина), @Juraj

@Juraj - Вопрос отредактирован. вы правы... isNull() возвращает, что массив не пуст., @Guy . D


1 ответ


Лучший ответ:

1

Метод isNull() — это не то, что вам нужно. Он сообщает вам, содержит ли экземпляр массив вообще или нет. И, конечно же, ваш конкретный экземпляр содержит массив, хотя и пустой. Поэтому метод корректно возвращает false, также известный как 0.

Как показывает документация по API, существует больше методов, которые можно использовать.

Что вам нужно, так это size(), который возвращает количество элементов в массиве. Он даже вернет 0 для экземпляра без массива.

,

в этом случае doc["Winname"].size() будет достаточно. Мне действительно не нужно использовать массив., @Guy . D