0

在 boost 中迭代 JSON ptree 时,我需要一些帮助。这是结构。

{"drives": [{"busy": false, "eof": false, "density": 88 }]}

我想要做的是打印键和值,例如。忙=假。我试过下面的代码,但没有输出。

BOOST_FOREACH(ptree::value_type &v, pt.get_child("drives"))
{
    cout << v.first << endl; // does not work
    cout << v.second.data() << endl; // does not work
    cout << v.second.get<string>("busy"); // works
}

那么如何打印密钥呢?

提前感谢您的帮助。

4

1 回答 1

0

我浏览了一些旧代码并找到了方法

BOOST_FOREACH(ptree::value_type &v, pt.get_child("drives"))
{
   for(auto iter = v.second.begin(); iter!= v.second.end(); ++iter)
   {
       std::cout << iter->first << " : " << iter->second.get_value<std::string>() << std::endl;
   }

}

如果您有多个“驱动器”,则只需要迭代“驱动器”,而在您的 json 示例中您没有。

在您的代码中,您尝试打印 v.first 和 v.data() 但这两个不包含您认为它们持有的数据。

v.first 应该持有"KeyName"的键名:{"busy": false, "eof": false, "density": 88 }

它不存在,因为该值是数组的一部分。

v.data() (如果我没记错的话)持有 key:value 这是一个内部表示,不能以这种方式打印。

我真的认为您应该尝试为 JSON 使用不同的框架。

于 2013-10-29T14:27:33.313 回答