Deserialize with ArduinoJson / Array

Hallo,
ich brauche eure Unterstützung.

Ich finde leider nicht den richtigen weg um über ArduioJson an die "Keys" bzw "Werte" des "werte" Arrays ran zu kommen. Das "werte" Array kann dabei unterschiedliche Keys enthalten. Eine fixe Adressierung ist mir also nicht möglich.
//Beispiel 1
{
"Datenbank":"JKS_28",
"SensorSet":"Kessel",
"SensorTimeStamp":"2022-02-28T04:59:00Z",
"werte":[
{"Kessel_Vorlauf":"61"},
{"Kessel_Kreislauf":"39"},
{"Kessel_Ruecklauf":"40"},
{"Kessel_Raum":"33"},
{"Kessel_Abgas":"41.75"},
{"Kessel_CO2":"0"}]
}
//Beispiel 2
{
"Datenbank":"JKS_28",
"SensorSet":"Umwelt",
"SensorTimeStamp":"2022-02-28T04:59:00Z",
"werte":[
{"Umwelt_Temp1":"5"},
{"Umwelt_Feuchte":"39"}
}

Vielen Dank für eure Unterstützung.

Lesen Sie dieses Beispiel

Hallo nochmal,

sorry, aber vielleicht sehe ich den Wald vor lauter Bäumen nicht. Ich bekomme die Daten nicht aus dem Array. Hier mal mein Code der so eigenständig lauffähig ist. :slight_smile:

#include <ArduinoJson.h>

void setup() {
  Serial.begin(9600);

  String Json = "{\"Datenbank\":\"JKS_28\",\"SensorSet\":\"Kessel\",\"werte\":[{\"Kessel_Vorlauf\":61},{\"Kessel_Kreislauf\":39}]}";
//String Json = "{\"Datenbank\":\"JKS_28\",\"SensorSet\":\"Umwelt\",\"werte\":[{\"Umwelt_Temp\":5,3},{\"Umwelt_Feuchte\":49},{\"Umwelt_Sonne\":78}]}";
  
  Serial.print("\n[JSON_deserialize]");
  Serial.print("\n\tJSON:" + Json);
        
      DynamicJsonDocument HttpJson(1024);
      DeserializationError error = deserializeJson(HttpJson, Json);
      if (error){
        Serial.print ("\n [ERROR] JSON_deserialize");
        return;
      }

     Serial.print ("\n\tStatischer Zugriff...");
      
            String Datenbank = HttpJson["Datenbank"];
                Serial.print ("\n\tDatenbank:" + String(Datenbank));
      
            String Kessel_Vorlauf = HttpJson["werte"][0]["Kessel_Vorlauf"];
                Serial.print ("\n\tKessel_Vorlauf:" + String(Kessel_Vorlauf));

    Serial.print ("\n\tDynamischer Zugriff...");

                    Serial.print("\n\t Werte Array.size:");
                    JsonArray WerteArray = HttpJson["werte"];
                    byte ArrayMax = WerteArray.size();
                    Serial.print(ArrayMax);

   Serial.print("\n\t Wert aus Array:");


      
  Serial.print("\n [JSON_deserialize] DONE");
}

void loop() {
  // put your main code here, to run repeatedly:

}

Wer kann mir helfen an die Informationen in "werte" ran zu kommen?

Inhalt A:
Kessel_Vorlauf = 61
Kessel_Kreislauf = 39

Inhalt B:
Umwelt_Temp = 5,3
Umwelt_Feuchte = 49
Umwelt_Sonne =78

Welcome

Try something like this

String Json = "{\"Datenbank\":\"JKS_28\",\"SensorSet\":\"Kessel\",\"werte\":[{\"Kessel_Vorlauf\":61},{\"Kessel_Kreislauf\":39}]}";

StaticJsonDocument<256> doc;
deserializeJson(doc, Json);

JsonArray a = doc[ "werte" ].as<JsonArray>();

for ( JsonObject o : a )
{
  for ( JsonPair p : o )
  {
      Serial.print( p.key().c_str() );
      Serial.print( " = " );
      Serial.println( p.value().as<int>() );
  }
}

But I'm not too good with json, there may be a better solution

1 Like

Many thanks to @guix
Copy - Paste - Works.
4 hours I was looking for a solution. - On this way I would certainly not have come.
I hope the example is also helpful for others.
Thank you!!!

Good :slight_smile:

You may need to replace with as<float> and replace 5,3 with 5.3 in your other example

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