boost:仅迭代ptree的元素

| 这应该很简单(我只是在学习提升,所以我缺少了一些东西) 我已经使用json_read读取了一些简单的JSON,现在有了一个ptree。网络上的所有示例均使用ptree.get(\“ entry_name \”)来获取条目。我要做的只是:
 ptree pt;
 read_json(ss,pt);

 BOOST_FOREACH(ptree::value_type &v, pt)
 {
   std::cout << v.{entry_name} << v.{value}
 }
即遍历ptree并写出每个名称(即您在pt.get()中输入的名称)及其对应的值。 抱歉,这很简单 罗斯     
已邀请:
我在搜寻同一件事,却找不到任何答案。事实证明确实很简单:
ptree pt;
/* load/fill pt */
for(iterator iter = pt.begin(); iter != pt.end(); iter++)
{
  std::cout << iter->first << \",\" << iter->second.data() << std::endl;
}
iter-> first是条目名称,iter-> second.data()是第一级的条目值。 (然后,您可以使用iter-> second.begin()/ end()进行更深层次的迭代。) 此外,如果此迭代中的一个这样的节点不是终端节点,并且本身是ptree,则可以从此迭代器本身将其作为ptree获得: ptree subPt = iter-> second.get_child(\“ nodeName \”); 感谢您为我提供了一个理解它的方向,ptree现在看起来像其他C ++ stl函数一样非常直观。     
我也遇到了ptree的麻烦,但这也许可以帮助您: 查看boost \的ptree快速教程   v。{entry_name}   将会   第一 和   v。{value}   v.second.data() 那行得通吗?     
这是一个如何使用BOOST_FOREACH迭代ptree的好例子 http://akrzemi1.wordpress.com/2011/07/13/parsing-xml-with-boost/ 要使用普通的“ get”功能直接访问,请查看boost中的示例: http://www.boost.org/doc/libs/1_51_0/doc/html/boost_propertytree/tutorial.html 文档页面位于此处: http://www.boost.org/doc/libs/1_51_0/doc/html/boost/property_tree/basic_ptree.html 我知道它的文档记录不是很好,但是很有帮助。     
旧线程,但这是mr_georg的答案的C ++ 11版本,具有基于范围的for循环:
ptree pt;
/* load/fill pt */
for(auto pair : pt)
{
  std::cout << pair.first << \",\" << pair.second.data() << std::endl;
}
对于此json:
{
    \"key1\":\"value1\",
    \"key2\":\"value2\"
}
它输出:
key1,value1
key2,value2
    
此示例迭代一个简单的JSON对象,并将其值放入向量中。
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/lexical_cast.hpp>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

int main (void)
{   
    try
    {        
        std::stringstream ss;
        std::string json_obj_str = \"{ \\\"unit_1\\\": 1, \\\"unit_2\\\": 2, \\\"unit_3\\\": 3 }\";
        std::vector <float> fvec;

        ss << json_obj_str; // put string into stringstream

        boost::property_tree::ptree pt;
        boost::property_tree::read_json(ss, pt);    // put stringstream into property tree

        // iterate over JSON properties
        for (boost::property_tree::ptree::iterator iter = pt.begin(); iter != pt.end(); iter++)
        {
            std::cout << iter->first << \": \" << iter->second.data() << std::endl;
            fvec.push_back(boost::lexical_cast<float>(iter->second.data()));
        }

        for (size_t i = 0; i < fvec.size(); i++)
        {
            std::cout << \"fvec.at(\" << i << \") = \" << fvec.at(i) << std::endl;
        }
    }
    catch (const boost::property_tree::ptree_error &e)
    {
        std::cerr << \"property_tree error = \" << e.what() << std::endl;
        return -2;
    }       
    catch (std::exception const& e)
    {
        std::cerr << \"exception = \" << e.what() << std::endl;
        return -1;
    }

    return 0;
}
    

要回复问题请先登录注册