检查boost属性树中的值是树还是终值

ram*_*ter 5 c++ json boost boost-propertytree

我一直在寻找boost :: property_tree(用于读取json)的API,我可以用它来确定字段的值是树还是终值.例如,我有一个json,其中foo的值可以是第一个块中所示的树,也可以是第二个块中所示的字符串.

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

{
    "foo": "bar"
}
Run Code Online (Sandbox Code Playgroud)

我知道我们可以先用get_child_optional查看.如果返回的值为null,那么我们可以检查get_optional.但有没有更好的方法/ apis这样做?

Ale*_*exT 11

试试这个:

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;
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用boost 1.62,我必须写`pt.data()。empty()`而不是`pt.data.empty()`。 (2认同)