6

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

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

{
    "foo": "bar"
}

我知道我们可以先检查 get_child_optional。如果返回值为null,那么我们可以检查get_optional。但是有没有更好的方法/api来做到这一点?

4

1 回答 1

12

尝试这个:

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;
于 2014-02-04T15:54:32.623 回答