2013-03-04 14 views
5

Ich habe APIs in boost :: property_tree gesucht (die zum Lesen eines JSON verwendet wird), die ich verwenden kann, um festzustellen, ob ein Wert von a Feld ist ein Baum oder ein Endwert. Zum Beispiel habe ich einen JSON, wobei der Wert von foo entweder ein Baum sein kann, wie im ersten Block dargestellt, oder ein String, wie im zweiten Block dargestellt.Überprüfen, ob ein Wert in einem Boost-Eigenschaftsbaum ein Baum oder ein Terminal-Wert ist

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

{ 
    "foo": "bar" 
} 

Ich weiß, dass wir zuerst mit get_child_optional überprüfen können. Wenn der zurückgegebene Wert null ist, können wir get_optional überprüfen. Aber gibt es bessere Wege/Apis, dies zu tun?

Antwort

7

die Sie interessieren.

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

Ich verwende Boost 1.62 und ich muss schreiben 'pt.data() empty()' statt 'pt.data.empty()'. – Skywalker13

Verwandte Themen