Определение размера документа ArduinoJSON на основе размера файла

esp8266 json

Я пытаюсь эффективно распределить размер документа на основе размера файла, сохраненного во флэш-памяти ESP8266. Есть ли способ?

Например: file.size() X 1,5

, 👍0

Обсуждение

Я думаю, что это очень сильно зависит от содержания. Если у вас много строковых данных, они могут хорошо коррелировать. Если у вас много числовых данных, то я бы предположил, что внутреннее представление может быть намного меньше, чем представление тех же данных в текстовом файле., @Majenko

@Majenko Поскольку некоторые файлы параметров хранятся на флэш-памяти (которые также могут быть изменены в будущем), один размер может быть 256, а другой - 1250. Моя цель - не выделять максимальное количество всех, @Guy . D


1 ответ


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

4

К сожалению, невозможно предсказать размер JsonDocument из файла. только размер.

В качестве обходного пути я предлагаю вам выделить очень большой пул памяти и уменьшить его после десериализации; вот так:

DynamicJsonDocument doc(ESP.getMaxAllocHeap());
deserializeJson(doc, file);
doc.shrinkToFit();

Действительно, эта программа потребляет больше памяти, чем требуется, но только на долю секунды.

См. также:

  • Как определить емкость JsonDocument?
  • BasicJsonDocument::shrinkToFit()
,

Только для DynamicJsonDocument?, @Guy . D

@guyd shrinkToFit также доступен в BasicJsonDocument. Но не в JsonDocument или StaticJsonDocument. См. [документы] (https://arduinojson.org/v6/api/jsondocument/), чтобы определить, какой из них использовать в вашем случае., @orithena

В зависимости от того, что на самом деле делается, также может быть полезна функция [фильтрации](https://arduinojson.org/v6/example/filter/)., @timemage

@guyd, вы спросили, как определить размер документа *во время выполнения*, поэтому StaticJsonDocument не вариант., @Benoit Blanchon