Я искал API в boost :: property_tree (который используется для чтения json), который я могу использовать, чтобы определить, является ли значение поля деревом или значением терминала. Например, у меня есть json, где значение foo может быть либо деревом, как показано в первом блоке, либо строкой, как показано во втором блоке.
{
"foo": {
" n1": "v1",
"n2": "v2"}
}
{
"foo": "bar"}
Я знаю, что мы можем проверить сначала с get_child_optional. Если возвращаемое значение равно нулю, то мы можем проверить get_optional. Но есть ли лучшие способы / apis, чтобы сделать это?
Попробуй это:
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;
Других решений пока нет …