Проверка, является ли значение в дереве свойств надстройки деревом или значением терминала

Я искал API в boost :: property_tree (который используется для чтения json), который я могу использовать, чтобы определить, является ли значение поля деревом или значением терминала. Например, у меня есть json, где значение foo может быть либо деревом, как показано в первом блоке, либо строкой, как показано во втором блоке.

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

{
"foo": "bar"}

Я знаю, что мы можем проверить сначала с get_child_optional. Если возвращаемое значение равно нулю, то мы можем проверить get_optional. Но есть ли лучшие способы / apis, чтобы сделать это?

5

Решение

Попробуй это:

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;
11

Другие решения

Других решений пока нет …