2013-12-10 11 views
5

Niech Załóżmy, że mam tego pliku JSON:JsonCpp - kiedy mam obiekt json :: Value, skąd mogę wiedzieć, że jest to nazwa kluczowa?

[ 
    { 
     "id": 0 
    } 
] 

użyciu jsoncpp, mogę mieć Json::Value obiektu wykonując to:

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

OK, gdzieś w kodzie, że jestem coraz node obiekt, i chcę uzyskać z niego trochę informacji. Mogę uzyskać jego wartość, tak jak to:

int node_value = node.asInt(); 

Ale jak mogę uzyskać jego NAZWA? (tj. "id"). Powinno być coś takiego:

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

, ale nie mogę znaleźć niczego podobnego. Wsparcie? Jak mogę uzyskać nazwę węzła?

Odpowiedz

4

Możesz użyć Json :: Value :: getMemberNames() do iteracji po nazwach.

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

Ale to oznacza, że ​​muszę dostać się do rodzica obiektu wartości, który posiadam (co jest kolejnym bez odpowiedzi moim pytaniem). Czy istnieje sposób na dotarcie do rodzica obiektu wartości? – Rong

+0

Nie ma sposobu, aby uzyskać rodzica wartości, o ile wiem; a po co ci to? Jaki jest twój przypadek użycia? – Brandon

+0

Zostałem poproszony o napisanie wrappera do biblioteki jsoncpp, z możliwością przechodzenia przez drzewo json. Zakładałem, że jsoncpp już to załatwił i po prostu muszę się dowiedzieć, jak to zrobić. – Rong

1

Potrzebujesz wskaźnika? To nie jest zły pomysł, ale dodanie pola dla wskaźnika spowoduje przerwanie zgodności binarnej (which is very important). Więc tak, musisz go zawinąć.

Obecnie wartość podrzędna to tylko Value, podobnie jak każda inna.

Powiązane problemy