2013-03-04 8 views
5

Szukałem API w boost :: property_tree (który jest używany do czytania json), którego mogę użyć do określenia, czy wartość pole to drzewo lub wartość końcowa. Na przykład mam json, gdzie wartość foo może być drzewem, jak pokazano w pierwszym bloku lub ciągiem, jak pokazano w drugim bloku.Sprawdzanie, czy wartość w drzewie właściwości doładowania jest drzewem lub wartością terminalową

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

{ 
    "foo": "bar" 
} 

Wiem, że możemy sprawdzić najpierw z get_child_optional. Jeśli zwrócona wartość jest pusta, możemy sprawdzić get_optional. Ale czy istnieją jakieś lepsze sposoby/apis to zrobić?

Odpowiedz

7

Spróbuj tego:.

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

Używam impuls 1,62 i muszę napisać 'pt.data() pusty()' zamiast 'pt.data.empty()'. – Skywalker13

Powiązane problemy