3

I am getting a json object from aws iot MQTT. Assuming that json from aws is {status:opened}. Here is my code.

#include <ArduinoJson.h>
void messageHandler(char *topic, byte *payload, unsigned int length)
{
  StaticJsonDocument<32> doc;
  deserializeJson(doc, payload);
  const char *status = doc["status"];
  Serial.println(status);//opened
  if (status == "opened")
  {
    Serial.println("door is opened");//not excute
  }
  else if (status == "closed")
  {
    Serial.println("door is closed");
  }
}

Why the if condition is not being excute?

Jess
  • 53
  • 2

1 Answers1

6

That's one of the peculiarities of the C language: the == operator compares the string addresses, not their content. It makes sense when you think of them as pointers, but it can be confusing for beginners.

To fix this, you can use strcmp() like so:

if (strcmp(status,"opened") == 0)

Alternatively, you can change the type of status to JsonVariant, like so:

JsonVariant status = doc["status"]

It works with JsonVariant because I overloaded the == operator to support string comparison.

Benoit Blanchon
  • 932
  • 4
  • 8