invalid input on deserialisejson

hi,
sorry but i need help for this one
i try to deserialize a json retrieved from mqtt.

firs of all, the deserialize code :

  char* mqtt_position="{\"lt\":\"45.758498\",\"lg\":\"2.788455\",\"al\":\"1600\"}";
  StaticJsonDocument<200> doc;    
  DeserializationError error = deserializeJson(doc, mqtt_position);


  // Test if parsing succeeds.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    //return;
    delay(3000);
  }

=>this code work fine
then the mqtt subscription code :

    char* mqtt_position = "";
    MQTT_connect();

    Adafruit_MQTT_Subscribe *subscription;
    while ((subscription = mqtt.readSubscription(10))) {
      if (subscription == &coord) {
        Serial.print(F("Got: "));
        Serial.println((char *)coord.lastread);
        mqtt_position = (char*)coord.lastread;
      }
    }
  
    Serial.print("mqtt_position");  Serial.println(mqtt_position);

=>this code work fine

but if i want to use dereialize on mqtt_position, i get an error "invalid input"

	char* mqtt_position = "";
    MQTT_connect();

    Adafruit_MQTT_Subscribe *subscription;
    while ((subscription = mqtt.readSubscription(10))) {
      if (subscription == &coord) {
        Serial.print(F("Got: "));
        Serial.println((char *)coord.lastread);
        mqtt_position = (char*)coord.lastread;
      }
    }
  
    Serial.print("mqtt_position");  Serial.println(mqtt_position);

    StaticJsonDocument<200> doc;

    DeserializationError error = deserializeJson(doc, mqtt_position);
 
     // Test if parsing succeeds.
    if (error) {
		Serial.print(F("deserializeJson() failed: "));
		Serial.println(error.c_str());
		//return;
		delay(3000);
    }

i don't understant what happen here, if someone can help
thx

it's difficult to try to discern what "invalid input" means when given only a code fragment.

is "invalid input" a compiler error or your interpretation of a problem when running your code?

the code compile without problem, it is when i run it on the esp32, i see this error on serial
i will copy/paste the entire code this evening
thank you

here is the complete file in attachment
i put in comment different code i tryed and the result i got

    MQTT_connect();

    Adafruit_MQTT_Subscribe *subscription;
    while ((subscription = mqtt.readSubscription(1))) {
      if (subscription == &coord) {
        Serial.print(F("Got: "));
        Serial.println((char *)coord.lastread);
        mqtt_position = (char*)coord.lastread;
      }
    }
    Serial.print("mqtt_position");
    Serial.println(mqtt_position);
// this looks right in serial 
//16:00:30.345 -> mqtt_position{"lt":"45.178598","lg":"2.788655","al":"1600"}

    StaticJsonDocument<200> doc;

  //DeserializationError error = deserializeJson(doc, mqtt_position); // this get error on execution
//=>Guru Meditation Error: Core  1 panic'ed (LoadStoreError). Exception was unhandled.
  
  //mqtt_position="{\"lt\":\"45.178498\",\"lg\":\"6.658455\",\"al\":\"1600.000000\"}";   
  //DeserializationError error = deserializeJson(doc, mqtt_position);
//=>Guru Meditation Error: Core  1 panic'ed (LoadStoreError). Exception was unhandled.

  //String string_position=String(mqtt_position);
  //DeserializationError error = deserializeJson(doc, string_position);
//=>that get json invalid input  
//16:09:15.083 -> deserializeJson() failed: InvalidInput

  String string_position="{\"lt\":\"45.178498\",\"lg\":\"6.658455\",\"al\":\"1600.000000\"}"; 
  DeserializationError error = deserializeJson(doc, string_position);
//=>that work fine

mountesp_debug.ino (10.6 KB)

char* mqtt_position = "";

mqtt_position is a character pointer and that seems to be related to the problem.

You tried casting it to a String but that didn't work:

  String string_position=String(mqtt_position);
  DeserializationError error = deserializeJson(doc, string_position);
  // =>that get json invalid input
  // 16:09:15.083 -> deserializeJson() failed: InvalidInput

The value stored in a String worked:

  String string_position = "{\"lt\":\"45.178498\",\"lg\":\"6.658455\",\"al\":\"1600.000000\"}";
  DeserializationError error = deserializeJson(doc, string_position);
  //=>that work fine

So try moving the string into a String:

  String string_position = mqtt_position;
  DeserializationError error = deserializeJson(doc, string_position);

I wonder if it is the casting of 'coord.lastread' to (char *) that is causing a problem. What is the type of 'coord.lastread'?

hi
sorry, i didn't come back on the forum since i solved my problem with not using json ^^
thank you for your reply, i will try that if i have the same case in the future

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