Глобальный JsonObject (ArduinoJson)
arduino-ide
json
Я знаю, что нельзя использовать глобальный объект JsonObject, но у меня есть свои причины.
У меня есть функции JsonObject*, и я хочу, чтобы он сохранял содержимое файла. С
functions=new JsonObject(jsonBuffer.as<JsonObject>());
Я могу получить доступ к JsonObject, но не при выходе из метода. Может ли кто-нибудь помочь мне понять, почему? (Не давайте мне решение типа: скопировать в структуру, мне нужен JsonObject, готовый для чтения во всем моем коде.
Полный код:
JsonObject* functions;
void loadFunctions() {
File file = SPIFFS.open("/functions.json", "r");
if (!file) {
Serial.println("Failed to open the file");
}else{
size_t size = file.size();
if (size > 512) {
Serial.println("File size is too large");
}else{
std::unique_ptr<char[]> buf(new char[size]);
file.readBytes(buf.get(), size);
DynamicJsonDocument jsonBuffer(256);
DeserializationError error = deserializeJson(jsonBuffer, buf.get());
if (error) {
Serial.println("Failed to parse file ");
} else {
functions=new JsonObject(jsonBuffer.as<JsonObject>());
Serial.println((*functions)["test"].as<String>()); // это не работает в другом методе
}
}
}
}
@Maray97, 👍0
Обсуждение1 ответ
▲ 1
jsonBuffer
является локальным для функции. Когда вы выходите из функции, содержимое jsonBuffer
теряется.
functions
просто указывает на внутренности jsonBuffer
, чтобы получить его данные (для экономии памяти).
Вы можете:
- Сделайте
jsonBuffer
глобальным, чтобы он оставался постоянным, или - Имейте дополнительный глобальный
DynamicJsonDocument
илиStaticJsonDocument
, в который вы копируете свои объекты после чтения изjsonBuffer
.
,
@Majenko
Спасибо, решил, выбрав второй вариант., @Maray97
Смотрите также:
- NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
- Цикл foreach Arduino JSON
- ESP8266 SPIFFS не сохраняется правильно?
- Не могу скомпилировать .ino с помощью библиотеки ArduinoJson
- Чтение и запись в JSON-файл с Arduino?
- Второй элемент в массиве не назначается из объекта структуры, ArduinoJson
- Ошибка синтаксического анализа библиотеки ArduinoJson
- Большое число в переменную
Вы где-нибудь вызывали loadFunctions?, @ratchet freak
Да и последний Serial.println работает, но не если я использую его в другом методе (после этого метода), @Maray97