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
gcjr
March 24, 2021, 1:44pm
2
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
system
Closed
August 7, 2021, 11:55am
7
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.