Json file TooDeep

Hi everyone !
I have a project to display the next metro train in the station down my appartement above my door !
I have a LoLin V3. I succeded in conecting the card to the wifi, talking to the api server, donwloading the Json file but i cannot acces the data in it.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

// Informations de connexion Wi-Fi
const char* ssid = "SSID"; // Nom du réseau Wi-Fi
const char* password = "PASSWORD"; // Mot de passe Wi-Fi

// URL de l'API
const char* serverUrl = "https://prim.iledefrance-mobilites.fr/marketplace/stop-monitoring?MonitoringRef=STIF:StopPoint:Q:463134:&LineRef=STIF:Line::C01387:";

// Clé API
const char* apiKey = "APIKEY";

// Objet WiFiClientSecure pour HTTPS
WiFiClientSecure client;

void setup() {
  // Initialisation de la communication série
  Serial.begin(115200);

  // Connexion au Wi-Fi
  Serial.println("Connexion au réseau WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("\nConnecté au WiFi!");

  // Ajouter le certificat SSL à la connexion
  client.setInsecure();  // Désactiver la validation SSL pour tester

  // Initialisation de l'HTTPClient
  HTTPClient http;
  http.begin(client, serverUrl);  // Utiliser HTTPS avec WiFiClientSecure
  http.addHeader("accept", "application/json");
  http.addHeader("apiKey", apiKey);

  int httpResponseCode = http.GET();  // Faire une requête GET
  
  if (httpResponseCode > 0) {
    Serial.print("Code de réponse HTTP : ");
    Serial.println(httpResponseCode);

    // Afficher la réponse brute du serveur
    String payload = http.getString();
    Serial.println("Réponse brute du serveur : ");
    Serial.println(payload);  // Afficher le JSON brut pour inspection

    // Au lieu de désérialiser l'ensemble du JSON, traiter par morceaux
    DynamicJsonDocument doc(10000);  // Plus petit document pour éviter l'erreur "TooDeep"
    DeserializationError error = deserializeJson(doc, payload);
    
    if (error) {
      Serial.print("Erreur de désérialisation JSON : ");
      Serial.println(error.f_str());
      return;
    }

    // Parcourir progressivement chaque morceau du JSON
    JsonObject serviceDelivery = doc["Siri"]["ServiceDelivery"];
    JsonArray stopMonitoringDelivery = serviceDelivery["StopMonitoringDelivery"].as<JsonArray>();
    
    for (JsonObject stop : stopMonitoringDelivery) {
      JsonArray monitoredStopVisit = stop["MonitoredStopVisit"].as<JsonArray>();

      // Traiter par morceaux pour éviter une profondeur excessive
      for (JsonObject visit : monitoredStopVisit) {
        const char* recordedAtTime = visit["RecordedAtTime"];
        const char* destination = visit["MonitoredVehicleJourney"]["DestinationName"][0]["value"];
        
        // Afficher certaines informations extraites
        Serial.print("Heure d'enregistrement : ");
        Serial.println(recordedAtTime);
        Serial.print("Destination : ");
        Serial.println(destination);
      }
    }
  } else {
    Serial.print("Erreur dans la requête HTTP : ");
    Serial.println(http.errorToString(httpResponseCode));
  }

  http.end();
}

void loop() {
  // Rien à faire dans la boucle principale
}

Apparently the Json is "TooDeep". I cannot solve the problem so I'm asking if any of you got some insight !

Could be a library limitation, memory limitation or a problem with the JSON file. Please attach the JSON file.

{"Siri":{"ServiceDelivery":{"ResponseTimestamp":"2024-12-05T16:22:27.591Z","ProducerRef":"IVTR_HET","ResponseMessageIdentifier":"IVTR_HET:ResponseMessage:81ed2208-f335-41d7-9997-92da9dcf5e08:LOC:","StopMonitoringDelivery":[{"ResponseTimestamp":"2024-12-05T16:22:27.608Z","Version":"2.0","Status":"true","MonitoredStopVisit":[{"RecordedAtTime":"2024-12-05T16:22:17.511Z","ItemIdentifier":"RATP-SIV:Item::20241205.146.A.C01387.PALS.IDFM.C01387.A.RATP.50026147:LOC","MonitoringRef":{"value":"STIF:StopPoint:Q:463134:"},"MonitoredVehicleJourney":{"LineRef":{"value":"STIF:Line::C01387:"},"OperatorRef":{"value":"RATP-SIV:Operator::RATP.OCTAVE.7B.15:"},"FramedVehicleJourneyRef":{"DataFrameRef":{"value":"any"},"DatedVehicleJourneyRef":"RATP-SIV:VehicleJourney::20241205.146.A.C01387:LOC"},"DirectionName":[{"value":"Louis Blanc"}],"DestinationRef":{"value":"STIF:StopPoint:Q:463034:"},"DestinationName":[{"value":"Louis Blanc"}],"VehicleJourneyName":[],"JourneyNote":[],"MonitoredCall":{"StopPointName":[{"value":"Botzaris"}],"VehicleAtStop":false,"DestinationDisplay":[{"value":"Louis Blanc"}],"ExpectedArrivalTime":"2024-12-05T16:24:17.511Z","ExpectedDepartureTime":"2024-12-05T16:24:17.511Z","DepartureStatus":"onTime","ArrivalStatus":""},"TrainNumbers":{"TrainNumberRef":[]},"VehicleFeatureRef":[],"DirectionRef":{"value":"DIR:IDFM:C01387:A"}}},{"RecordedAtTime":"2024-12-05T16:12:30.470Z","ItemIdentifier":"RATP-SIV:Item::20241205.147.A.C01387.PALS.IDFM.C01387.A.RATP.50026147:LOC","MonitoringRef":{"value":"STIF:StopPoint:Q:463134:"},"MonitoredVehicleJourney":{"LineRef":{"value":"STIF:Line::C01387:"},"OperatorRef":{"value":"RATP-SIV:Operator::RATP.OCTAVE.7B.15:"},"FramedVehicleJourneyRef":{"DataFrameRef":{"value":"any"},"DatedVehicleJourneyRef":"RATP-SIV:VehicleJourney::20241205.147.A.C01387:LOC"},"DirectionName":[{"value":"Louis Blanc"}],"DestinationRef":{"value":"STIF:StopPoint:Q:463034:"},"DestinationName":[{"value":"Louis Blanc"}],"VehicleJourneyName":[],"JourneyNote":[],"MonitoredCall":{"StopPointName":[{"value":"Botzaris"}],"VehicleAtStop":false,"DestinationDisplay":[{"value":"Louis Blanc"}],"ExpectedArrivalTime":"2024-12-05T16:29:30.470Z","ExpectedDepartureTime":"2024-12-05T16:29:30.470Z","DepartureStatus":"onTime","ArrivalStatus":""},"TrainNumbers":{"TrainNumberRef":[]},"VehicleFeatureRef":[],"DirectionRef":{"value":"DIR:IDFM:C01387:A"}}},{"RecordedAtTime":"2024-12-05T16:17:16.531Z","ItemIdentifier":"RATP-SIV:Item::20241205.148.A.C01387.PALS.IDFM.C01387.A.RATP.50026147:LOC","MonitoringRef":{"value":"STIF:StopPoint:Q:463134:"},"MonitoredVehicleJourney":{"LineRef":{"value":"STIF:Line::C01387:"},"OperatorRef":{"value":"RATP-SIV:Operator::RATP.OCTAVE.7B.15:"},"FramedVehicleJourneyRef":{"DataFrameRef":{"value":"any"},"DatedVehicleJourneyRef":"RATP-SIV:VehicleJourney::20241205.148.A.C01387:LOC"},"DirectionName":[{"value":"Louis Blanc"}],"DestinationRef":{"value":"STIF:StopPoint:Q:463034:"},"DestinationName":[{"value":"Louis Blanc"}],"VehicleJourneyName":[],"JourneyNote":[],"MonitoredCall":{"StopPointName":[{"value":"Botzaris"}],"VehicleAtStop":false,"DestinationDisplay":[{"value":"Louis Blanc"}],"ExpectedArrivalTime":"2024-12-05T16:33:16.531Z","ExpectedDepartureTime":"2024-12-05T16:33:16.531Z","DepartureStatus":"onTime","ArrivalStatus":""},"TrainNumbers":{"TrainNumberRef":[]},"VehicleFeatureRef":[],"DirectionRef":{"value":"DIR:IDFM:C01387:A"}}},{"RecordedAtTime":"2024-12-05T16:21:09.654Z","ItemIdentifier":"RATP-SIV:Item::20241205.149.A.C01387.PALS.IDFM.C01387.A.RATP.50026147:LOC","MonitoringRef":{"value":"STIF:StopPoint:Q:463134:"},"MonitoredVehicleJourney":{"LineRef":{"value":"STIF:Line::C01387:"},"OperatorRef":{"value":"RATP-SIV:Operator::RATP.OCTAVE.7B.15:"},"FramedVehicleJourneyRef":{"DataFrameRef":{"value":"any"},"DatedVehicleJourneyRef":"RATP-SIV:VehicleJourney::20241205.149.A.C01387:LOC"},"DirectionName":[{"value":"Louis Blanc"}],"DestinationRef":{"value":"STIF:StopPoint:Q:463034:"},"DestinationName":[{"value":"Louis Blanc"}],"VehicleJourneyName":[],"JourneyNote":[],"MonitoredCall":{"StopPointName":[{"value":"Botzaris"}],"VehicleAtStop":false,"DestinationDisplay":[{"value":"Louis Blanc"}],"ExpectedArrivalTime":"2024-12-05T16:38:09.654Z","ExpectedDepartureTime":"2024-12-05T16:38:09.654Z","DepartureStatus":"onTime","ArrivalStatus":""},"TrainNumbers":{"TrainNumberRef":[]},"VehicleFeatureRef":[],"DirectionRef":{"value":"DIR:IDFM:C01387:A"}}}]}]}}}

Nothing seems to be wrong with the JSON text. Please post the complete error message, or all relevant details pertaining to the error.

I suggest to study the library documentation carefully, and reconsider use of this line of code, which is known to lead to problems:

  DynamicJsonDocument doc(10000);  // Plus petit document pour éviter l'erreur "TooDeep"

Here : Erreur de désérialisation JSON : TooDeep

That is a comment in the code, not an error message.

Ooooh ok ok. Well there is none then

Sorry, my comment above is not correct. I misread your post.

I don't see anything in this ArduinoJson library code that might emit a "TooDeep" error message. Are you using the latest version of the library?

What actually happens when you run the code with the posted JSON text, which contains 4,411 characters? Perhaps that message concerns another document, with more than 10,000 characters.

When I run my code this part of the code :

// Au lieu de désérialiser l'ensemble du JSON, traiter par morceaux
    DynamicJsonDocument doc(10000);  // Plus petit document pour éviter l'erreur "TooDeep"
    DeserializationError error = deserializeJson(doc, payload);
    
    if (error) {
      Serial.print("Erreur de désérialisation JSON : ");
      Serial.println(error.f_str());
      return;
    }

It's telling me "Derealization error : Json document TooDeep"

Please answer the questions above.

According to this webpage https://arduinojson.org/v6/api/misc/deserializationerror/#toodeep the error message is caused by the nesting limit being reached.

Further explanation of the cause on this webpage https://arduinojson.org/v6/api/config/default_nesting_limit/

Yes sorry my bad. Yes I am using the latest library and the json file that I gave comes from the printing from the program

Thx a lot @david_2018 it works !!

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