如何在arduino中创建嵌套对象JSON

How to create a nested object JSON in arduino

我正在处理 nrf24l01 网络。我想像这样在 JSON 字符串中存储来自传感器节点的值(如 id、value temp、value humid)。 我的字符串:

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

我可以创建一个对象并从温度和湿度中添加值,但我不知道如何创建“1”/* ID /*

我的代码

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("");
    }
  }
}

您可以使用 createnestedobject,同时请记住,您是在循环中创建嵌套的 json 对象,因此您需要注意 Json 文档的大小(256).

编辑:例如,当您的嵌套对象超过固定值时,您可以使用 clear() 函数清除 JSON 对象。

#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;
            }
        }
    }
}