Problem writing a file with a large json

jeancarlosc
Posts: 3
Joined: Mon Feb 24, 2025 12:38 pm

Problem writing a file with a large json

Postby jeancarlosc » Mon Feb 24, 2025 12:45 pm

I'm having problems with memory of a large json list.

I have it recorded in a database and the only way I found was to use the code in (reference 1) below to read the list that is inside the loop.

After reading, I pass this json list to record with LittleFS (“reference 2”) and I believe it is not recording.

If I add smaller json it doesn't overflow memory and everything works. I'm still new to ESP, it's my first project so I'm used to other languages ​​that have plenty of memory.

When I read the large recorded file I use the code from (reference 3) it gives the error Error loading JSON read file: EmptyInput I believe it did not record the large file

Reference 1

Code: Select all

WiFiClientSecure client; // Secure client for SSL/TLS

       HTTPClient http;        
      String url = String(serverApi)  + "?email=" + email + "&senha=" + senha;
       client.setInsecure(); // This disables SSL verification (unsafe for production)
        http.begin(client, url);
        http.addHeader("Content-Type", "application/json");

        int httpResponseCode = http.GET();
        
        if (httpResponseCode > 0) {

          WiFiClient* stream = http.getStreamPtr();
          String jsonString = "";
          while (stream->available()) {
            char c = stream->read();
            jsonString += c;  // Concatena os caracteres do JSON
          }


           // Se o JSON for muito grande, você pode processá-lo em partes aqui
    // Deserializando o JSON
          const size_t capacity = JSON_OBJECT_SIZE(50) + JSON_ARRAY_SIZE(50) + 500;
          DynamicJsonDocument doc(capacity);
           
          DeserializationError error = deserializeJson(doc, jsonString);

          if (error) {
            Serial.println("Erro ao desserializar JSON");
            return;
          }

          String comando = doc["comando"];
          String json= doc["json"];

            /*Serial.println("Tamanho string json");
            Serial.println(jsonString.length());*/

            Serial.println("comando ..." +  comando);
            //Serial.println("Json agendamento: " + jsonString);*
            //Serial.println(ESP.getFreeHeap());

          
          if (comando.length() > 0) {
             if (comando == "dosar-manual") {
               Serial.println("Json dosar-manual recebido: " + json);
               dosarManual(jsonString);

             }else if(comando == "agendamento"){
                Serial.println("Json agendamento: " +json);
                gravarAgendamento(json);
              }else if(comando == "calibrar"){
                  Serial.println("Json calibrar: " + json);
                  calibrar(jsonString);
              }
          }
              // Limpa os dados do documento

        }
      http.end();
Reference 2

Code: Select all

if (LittleFS.remove(path))
  {
    Serial.println("Arquivo deletado com sucesso!");
  }
  else
  {
    Serial.println("Erro ao deletar o arquivo!");
  }

  Serial.print("Escrevendo em: ");
  Serial.println(path);

  File file = LittleFS.open(path, "w"); // "w" -> cria ou sobrescreve o arquivo
  if (!file)
  {
    Serial.println("Falha ao abrir o arquivo para escrita!");
    return;
  }

  file.print(json);
  file.close();
  Serial.println("Arquivo gravado com sucesso!");
Reference 3

Code: Select all

Serial.print("Lendo JSON do arquivo: ");
  Serial.println(path);

  File file = LittleFS.open(path, "r");
  if (!file)
  {
    Serial.println("Erro ao abrir o arquivo para leitura!");
    return;
  }


  // Lê todo o conteúdo do arquivo
  //String jsonString;
  String jsonString;

  while (file.available())
  {

     jsonString += (char)file.read();
  }
  file.close();

  Serial.print("ler arquivo: jsonString ");

  const size_t capacity = JSON_OBJECT_SIZE(100) + JSON_ARRAY_SIZE(100) + 1000;
  DynamicJsonDocument doc(capacity);
  DeserializationError error = deserializeJson(doc,jsonString);
  if (error)
  {
    Serial.print("Erro ao carregar JSON ler arquivo: ");
    //enviarErro(email, "Erro ao carregar JSON:", "Função lerArquivo: Erro ao carregar JSON:");

    Serial.println(error.c_str());
    return;
  }

  // Obter o array JSON
  JsonArray array = doc.as<JsonArray>();

  for (JsonObject obj : array)
  {
}
json list that causes the problem

Code: Select all

[
{"key":1,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:00","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":2,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:12","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":3,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:18","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":4,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:24","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":5,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:30","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":6,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:36","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":7,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:42","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":8,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:48","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":9,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:54","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":10,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:00","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":11,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:06","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":12,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:12","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":13,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:18","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":14,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:24","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5}]

Who is online

Users browsing this forum: No registered users and 1 guest