2013-12-10 6 views
5

Lassen nehme ich diese Json-Datei haben:JsonCpp - wenn ich ein json :: Value-Objekt habe, woher weiß ich, dass es der Schlüsselname ist?

[ 
    { 
     "id": 0 
    } 
] 

jsoncpp verwendet wird, kann ich diese, indem Sie eine Json::Value bezwecken:

Json::Value node = root[0u]["id"]; 

OK, woanders im Code, erhalte ich, dass node Objekt, und ich möchte einige Informationen daraus erhalten. Ich kann seinen Wert erhalten, wie folgt:

int node_value = node.asInt(); 

Aber wie kann ich seinen NAME bekommen? (d. h. die "ID"). Es sollte so etwas wie sein:

string node_name = node.Name(); //or maybe: 
string node_name2 = node.Key(); 

aber ich kann nichts ähnliches finden. Hilfe? Wie kann ich den Namen eines Knotens erhalten?

Antwort

4

Sie können Json :: Value :: getMemberNames() verwenden, um die Namen zu durchlaufen.

Json::Value value; 
for (auto const& id : value.getMemberNames()) { 
    std::cout << id << std::endl; 
} 
+0

Aber das bedeutet, ich muss zum Elternteil des Value-Objekts, das ich habe (was eine weitere unbeantwortete Frage von mir ist). Gibt es eine Möglichkeit, zum übergeordneten Objekt eines Value-Objekts zu gelangen? – Rong

+0

Es gibt keine Möglichkeit, den Elternwert eines Werts zu erhalten, soweit ich weiß; Warum brauchen Sie es? Was ist dein Anwendungsfall? – Brandon

+0

Ich wurde gebeten, einen Wrapper in die jsoncpp-Bibliothek zu schreiben, mit einer Möglichkeit, den Baum des JSON zu durchlaufen. Ich nahm an, dass jsoncpp sich schon darum gekümmert hat und ich muss nur herausfinden wie. – Rong

1

Sie benötigen einen Aufwärtszeiger? Es ist keine schlechte Idee, aber das Hinzufügen eines Feldes für den Aufwärtszeiger würde die Binärkompatibilität (which is very important) unterbrechen. Also ja, du musst es einpacken.

Derzeit ist ein Unterwert nur ein Value, wie jeder andere auch.

Verwandte Themen