Estava usando o preferences para inserir uma lista json. Ela tem mais ou menos uns 10 campos. E faço uma lista com 20 posições e cada posição tem 10 campos. Vou precisar de 92 posições e cada posição com 10 campos.
Um JSON com 5 posições abaixo. usei o LittleFS mas ainda assim estou com problemas
{"key":1,"codUser":12,"codbomba":1,"dosagem":40,"hora":"13:15","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50.3"},{"key":2,"codUser":12,"codbomba":1,"dosagem":40,"hora":"13:29","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50.3"},{"key":3,"codUser":12,"codbomba":1,"dosagem":40,"hora":"13:36","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50.3"},{"key":4,"codUser":12,"codbomba":1,"dosagem":40,"hora":"13:43","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50.3"},{"key":5,"codUser":12,"codbomba":1,"dosagem":40,"hora":"13:50","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50.3"}]
void addUser( const char* namespaceName,String jsonString , int codBomba) {
preferences.begin("agendamento", false);
// Inicia o LittleFS
if (!LittleFS.begin()) {
Serial.println("❌ Erro ao iniciar LittleFS");
return;
}
// LittleFS.format();
// Verifica se o arquivo existe antes de ler
if (LittleFS.exists(FILE_PATH)) {
/*if (LittleFS.exists(FILE_PATH)) {
if (LittleFS.remove(FILE_PATH)) {
Serial.println("Arquivo deletado com sucesso!");
} else {
Serial.println("Erro ao deletar o arquivo!");
}
} else {
Serial.println("Arquivo não encontrado!");
}*/
Serial.println("📂 Arquivo encontrado! Lendo JSON...");
// Ler e exibir o conteúdo do arquivo
File file = LittleFS.open(FILE_PATH, "r"); // "r" = leitura
if (!file) {
Serial.println("❌ Erro ao abrir arquivo para leitura");
return;
}
Serial.println("📂 Conteúdo do arquivo:");
const char* dados;
while (file.available()) {
dados += (char)file.read();
delay(1);
}
DynamicJsonDocument doc(16384);
DeserializationError error = deserializeJson(doc, dados);
file.close();
Serial.println("\n✅ Leitura finalizada!");
//Serial.println("📂 JSON Recuperado:");
//Serial.println(dados);
// Busca o bando de ados
if (error) {
Serial.print("Erro ao processar JSON: ");
Serial.println(error.c_str());
enviarErro(email, "Erro ao processar JSON", "Função addUser - Erro ao processar JSON");
return;
}
// Exibe o JSON inicial
Serial.println("JSON inicial:");
serializeJson(doc, Serial);
Serial.println();
// Chave e valor a serem procurados para remoção
const char* keyToSearch = "codbomba";
int valueToRemove = codBomba;
// Cria um novo array para armazenar os elementos restantes
DynamicJsonDocument updatedDoc(8192);
JsonArray updatedArray = updatedDoc.to<JsonArray>();
// Itera sobre a lista JSON e copia apenas os elementos que NÃO correspondem ao valor da chave
unsigned long startMillis1 = millis();
unsigned long startMillis3 = millis();
for (JsonObject obj : doc.as<JsonArray>()) {
if (obj[keyToSearch] != valueToRemove) {
unsigned long afterDosagem = millis();
//Serial.println("adicionar elementos array: " + String(afterDosagem - startMillis3) + " ms");
updatedArray.add(obj); // Adiciona os elementos válidos ao novo array
//Serial.println("adicionar elementos array");
//Serial.println(obj);
delay(1);
} else {
unsigned long afterDosagem = millis();
//Serial.println("Removendo elemento " + String(afterDosagem - startMillis1) + " ms");
//Serial.println("Removendo elemento:");
//Serial.println(obj);
serializeJson(obj, Serial);
Serial.println();
delay(1);
}
}
// Exibe o JSON atualizado
Serial.println("\nJSON atualizado:");
serializeJson(updatedDoc, Serial);
Serial.println();
DynamicJsonDocument doc1(16384);
DeserializationError error1 = deserializeJson(doc1, jsonString );
if (error1) {
Serial.print("Erro ao processar JSON: ");
Serial.println(error.c_str());
enviarErro(email, "Erro ao processar JSON", "Função addUser - Erro ao processar JSON");
return;
}
unsigned long startMillis2 = millis();
for (JsonObject obj : doc1.as<JsonArray>()) {
unsigned long afterDosagem = millis();
Serial.println("Adiciona os elementos válidos ao novo array: " + String(afterDosagem - startMillis2) + " ms");
//Serial.println("Adiciona os elementos válidos ao novo array");
//Serial.println(obj);
updatedArray.add(obj); // Adiciona os elementos válidos ao novo array
delay(1);
}
String json;
serializeJson(updatedDoc, json);
// Salvar a string no NVS
Serial.begin(115200);
size_t tamanhoJSON = json.length();
Serial.print("Tamanho do JSON: ");
Serial.print(tamanhoJSON);
Serial.println(" bytes");
// Criar e escrever no arquivo
file = LittleFS.open(FILE_PATH, "w"); // "w" = escrita (cria ou sobrescreve)
if (!file) {
Serial.println("❌ Erro ao abrir arquivo para escrita");
return;
}
file.println(json);
file.close();
Serial.println("✅ JSON salvo com sucesso!");
Serial.println(); // Pula para a próxima linha
fetchRecords("agendamento");
}
/* Se não existir grava o arquivo a primeira vez */
else {
Serial.println("⚠️ Arquivo não encontrado! Criando JSON inicial...");
// Criar e escrever no arquivo
File file = LittleFS.open(FILE_PATH, "w"); // "w" = escrita (cria ou sobrescreve)
if (!file) {
Serial.println("❌ Erro ao abrir arquivo para escrita");
return;
}
file.print(jsonString);
file.close();
Serial.println("✅ JSON salvo com sucesso!");
}
preferences.end();
}