RapidJSON-Bibliothek, die einen Wert innerhalb eines Arrays durch seinen Index erhält

Lesezeit: 3 Minuten
{"hi": "hellow",
"first":
    {"next":[
            {"key":"important_value"}
        ]
    }

}

Zugriff auf RapidJSON innerhalb des Arrays:

das funktioniert: cout << "HI VALUE:" << variable["hi"].GetString() << endl; dies wird ausgegeben: hellow Wie erwartet besteht das Problem darin, auf interne Werte zuzugreifen, z. B. wenn ich “Important_Value” erhalten möchte. Ich habe Folgendes versucht: cout << "Key VALUE:" << variable["first"]["next"][0]["key"].GetString() << endl ; aber das funktioniert nicht, ich möchte in der Lage sein, den “important_value” durch das erste Element des Arrays zu erhalten, und in diesem Fall ist es das [0] das verursacht Fehler.

Wie bekomme ich es anhand seines Indexes? Ich hoffe, meine Erklärung ist klar.

Danke im Voraus.

Benutzer-Avatar
mola10

JSON

    {"hi": "hellow", "first":  {"next":[{"key":"important_value"}  ] } }

Code:

rapidjson::Document document;       

if (document.Parse<0>(json).HasParseError() == false)
{
    const Value& a = document["first"];

    const Value& b = a["next"];

    // rapidjson uses SizeType instead of size_t.
    for (rapidjson::SizeType i = 0; i < b.Size(); i++)
    {
        const Value& c = b[i];

        printf("%s \n",c["key"].GetString());
    }        
}

Wird gedruckt wichtiger_wert

  • Das beantwortet nichts, Junge, machen Sie ein Beispiel aus meinem Beispiel mit den Klammern [ ]die Klammern sind das Problem, weil es eine automatische Position von Arrays ist, das erste ist 0, das nächste ist 1 und so weiter … was Sie getan haben, habe ich bereits, versuchen Sie, den Wert wie in meinem Beispiel zu erhalten, verwenden Sie dasselbe Quelle.

    – Gregor

    7. April 2012 um 1:40 Uhr

  • Dies ist genau das, was ich suche, um auf ein verschachteltes Objekt in einem Array-Mitglied zuzugreifen. +1

    – haxpor

    8. Oktober 2014 um 13:59 Uhr

Benutzer-Avatar
Milo Yip

[Update]

Durch clevere Arbeit von Mitwirkenden kann RapidJSON jetzt wörtliche Begriffe eindeutig machen 0 aus Schnur. Das Problem tritt also nicht mehr auf.

https://github.com/miloyip/rapidjson/issues/167


Wie mjean betonte, ist das Problem, dass der Compiler nicht per Literial bestimmen kann, ob er den Objekt-Member-Accessor oder den Array-Element-Accessor aufrufen soll 0:

GenericValue& operator[](const Ch* name)
GenericValue& operator[](SizeType index)

Verwenden [0u] oder [SizeType(0)] kann dies umgehen.

Eine andere Möglichkeit, mit diesem Problem umzugehen, besteht darin, die Verwendung einer überladenen Version für den Operator einzustellen[]. Zum Beispiel mit operator() für eine Zugriffsart. Oder mit normalen Funktionen, z GetMember(), GetElement(). Aber ich habe im Moment keine Präferenz dafür. Andere Vorschläge sind willkommen.

Ich habe dies in der Datei tutorial.cpp bemerkt;

// Note:
//int x = a[0].GetInt();         // Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type.
int y = a[SizeType(0)].GetInt(); // Cast to SizeType will work.
int z = a[0u].GetInt();          // This works too.

Ich habe es nicht getestet, aber vielleicht möchten Sie eines davon ausprobieren;

Variable[“first”][“next”][0u][“key”].GetString()

Variable[“first”][“next”][SizeType(0)][“key”].GetString()

Wenn Sie mit Klammern darauf zugreifen möchten, können Sie Folgendes verwenden:

int i=0;
cout<<"Key VALUE:"<<variable["first"]["next"][i]["key"].GetString()<<endl ;

Ausgabe: Schlüssel WERT:wichtiger_Wert

Es hat für mich funktioniert.

auto value = my_array[rapidjson::SizeType(index)].GetFoo();
// replace GetFoo with the type of element you are retrieving, e.g. GetString, GetObject

1024760cookie-checkRapidJSON-Bibliothek, die einen Wert innerhalb eines Arrays durch seinen Index erhält

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy