Lista Json grande estourando memória

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();
    
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.