Search code examples
carduinoradio-transmission

How to create a nested object JSON in arduino


i'm doing with nrf24l01 network. i want to storage value from sensor node ( like id, value temp, value humid) in JSON string like this one. my string:

{ 
    "1": {//this is a ID from node
            "Temp": "value",
            "Humid": "value"
        },
    "2": {
         "Temp": "value",
         "Humid": "value"
     }
}

i can create a object and add value from temp and humid, but i dont know how to create "1" /* ID /*

My code

void loop() 
{
  network.update();
  if(network.available())
  {
    RF24NetworkHeader header;  
    network.read(header, &pack0, sizeof(pack0));
    if (header.from_node == 1)//this is the ID , return 1, 2, ....
    {
      object["ID"] = header.from_node;
      value["Temperature"] = pack0.temperature;
      value["Humidity"] = pack0.humidity;
      value["Soil"] = pack0.soil;
      serializeJsonPretty(object, Serial);
      Serial.println("");    }
    else if (header.from_node == 2)
    { 
      object["ID"] = header.from_node;
      value["Temperature"] = pack0.temperature;
      value["Humidity"] = pack0.humidity;
      value["Soil"] = pack0.soil; 
      serializeJsonPretty(object, Serial);
      Serial.println("");
    }
  }
}

Solution

  • You can use createnestedobject, also remember that you are creating nested json objects in a loop so you need to take care of the size of your Json document (256).

    EDIT: For example when your nested object exceeds a fixed value, You can use clear() function to clear the JSON object.

    #define MAX_ELEMENTS 10
    
    int receive_count = 0;
    StaticJsonDocument<256> doc;
    JsonObject object = doc.to<JsonObject>();
    
    void loop()
    {
        network.update();
        if (network.available())
        {
            RF24NetworkHeader header;
            network.read(header, &pack0, sizeof(pack0));
            if (header.from_node)
            {
                JsonObject ID = object.createNestedObject(String(header.from_node));
                ID["Temperature"] = pack0.temperature;
                ID["Humidity"] = pack0.humidity;
                ID["Soil"] = pack0.soil;
                serializeJsonPretty(object, Serial);
                Serial.println("");
                receive_count++;
                //reset counter if reached and clear object
                if (receive_count >= MAX_ELEMENTS)
                {
                    doc.clear();
                    object = doc.to<JsonObject>();
                    receive_count = 0;
                }
            }
        }
    }