Jsoncpp vernestete Arrays/Objekte

Hunter

Erfahrenes Mitglied
Hi,
ich bleibe beim auslesen einer json-Datei immer bei vernesteten Arrays/Objekte stecken. Hab auch nichts wirklich brauchbares bei Google gefunden. Evtl. ist es auch nur ein verständnisproblem. :D

So hier mal die JSON:
Javascript:
{
"future_href": "link...",
"collection": [
"origin": {
  "item" : "..",
  //...
  },
"origin": {
  "item" : "..",
  //...
  },
],
}

Bisheriger Code:
C++:
QString buffer; //Enthält json
Json::Reader reader;
Json::Value root;
reader.parse(buffer.toStdString(), root);

Json::Value collection = root["collection"];
for(int i = 0; i < collection.size(); i++) {
   //??
}

Nun, wie kann ich hier jetzt den Wert von "item" innerhalb von "origin" auselesen?
 
Hallo Hunter,

ich nehme an du verwendest die Bibliothek jsoncpp?
Laut deren Dokumentation solltest du folgendermaßen auf item zugreifen können:

C++:
Json::Value collection = root["collection"];
for(int i = 0; i < collection.size(); i++) {
    std::string = collection[i].get("item", "default").asString();
}

Der String default wird verwendet falls kein Objekt mit dem Schlüssel item existiert.

Nachtrag: Du kannst auch Iteratoren verwenden um über Elemente von Objekten oder Arrays zu iterieren: JsonCpp - JSON data format manipulation library

Grüße,
Guillermo
 
Zuletzt bearbeitet:
Ja ich verwende jsoncpp, hab ich ganz vergessen dazuzuschreiben.

//Diese Lösung hab ich auch schon versucht, jedoch bekomme ich dort immer eine exception.

EDIT: Wenn collection.get("artwork_url", "null").asString() anfordere bekomme ich immer null zurück.
Das wird wohl daran liegen, dass sich die items innerhalb von Origin liegen.
 
Zuletzt bearbeitet:
Hallo Hunter

Das ist kein gültiges JSON. Bei einem Array haben die einzelnen Elemente keinen Namen. Du müsstest das so machen:
Javascript:
{
    "future_href": "link...",
    "collection": [
        {
            "item": ".."
        },
        {
            "item": ".."
        }
    ]
}

Viele Grüsse
Cromon
 
Ich habe jetzt nochmal nachgeguckt und habe gesehen, dass mir da ein Fehler unterlaufen ist. So sieht die richtige Datei aus:
So funktioniert natürlich der Code, wenn ich "tags" anfordere.
Javascript:
{
  "future_href": "...",
  "collection": [
  {
  "origin": {
  "artwork_url": "...",   
  },
  "tags": null,

  },
  {
  "origin": {
  "artwork_url": "",   
  },
  "tags": null,
  }
  ],
  "next_href": "..."
}

Vielen Dank nochmal an euch. :)
 

Neue Beiträge

Zurück