2013-03-04 11 views
5

Ho cercato API in boost :: property_tree (utilizzato per leggere un json) che posso utilizzare per determinare se un valore di un il campo è un albero o un valore terminale. Ad esempio, ho un JSON in cui il valore di foo può essere un albero come illustrato nel primo blocco o una stringa come illustrato nel secondo blocco.Verificare se un valore in un albero di proprietà boost è un albero o un valore terminale

{ 
    "foo": { 
     " n1": "v1", 
     "n2": "v2" 
    } 
} 

{ 
    "foo": "bar" 
} 

So che possiamo controllare prima con get_child_optional. Se il valore restituito è nullo, possiamo controllare get_optional. Ma ci sono modi migliori/apis per fare questo?

risposta

7

Prova questo:.

property_tree pt; 
... 

if(pt.empty()) 
    cout << "Node doesn't have children" << endl; 

if(pt.data.empty()) 
    cout << "Node doesn't have data" << endl; 

if(pt.empty() && !pt.data.empty()) 
    cout << "Node is terminal value" << endl; 

if(!pt.empty() && pt.data.empty()) 
    cout << "Node is a tree" << endl; 
+1

sto usando spinta 1.62 e devo scrivere 'pt.data() vuota()' invece di 'pt.data.empty()'. – Skywalker13

Problemi correlati