2013-12-10 6 views
5

lasciare supporre che ho questo file JSON:JsonCpp - quando si ha un oggetto json :: Value, come posso sapere che è il nome della chiave?

[ 
    { 
     "id": 0 
    } 
] 

utilizzando jsoncpp, posso avere un oggetto Json::Value in questo modo:

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

OK, da qualche altra parte nel codice, sto ottenendo che node oggetto, e voglio ottenere alcune informazioni da esso. Posso ottenere il suo valore, in questo modo:

int node_value = node.asInt(); 

Ma come posso ottenere il suo NOME? (io "id"). Dovrebbe essere qualcosa del tipo:

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

ma non riesco a trovare nulla di simile. Aiuto? Come posso ottenere il nome di un nodo?

risposta

4

È possibile utilizzare Json :: Value :: getMemberNames() per scorrere i nomi.

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

Ma questo significa che devo arrivare al genitore dell'oggetto Value che ho (che è un'altra mia domanda senza risposta). C'è un modo per arrivare al genitore di un oggetto Value? – Rong

+0

Non c'è modo di ottenere il genitore di un Valore per quanto ne so; perchè ne hai bisogno? Qual è il tuo caso d'uso? – Brandon

+0

Mi è stato chiesto di scrivere un wrapper per la libreria jsoncpp, con un modo di attraversare l'albero del json. Ho pensato che jsoncpp si occupasse già di questo e dovevo solo scoprire come. – Rong

1

È necessario un puntatore verso l'alto? Non è una cattiva idea, ma l'aggiunta di un campo per il puntatore in alto spezzerebbe la compatibilità binaria (which is very important). Quindi sì, è necessario avvolgerlo.

Attualmente, un valore secondario è solo uno Value, come qualsiasi altro.

Problemi correlati