2012-08-10 55 views
1

我需要了解和修改示例代码。我被困在某一点,找不到任何解决方案。这里是代码:我们如何获得增强属性树中的对象

void foo(std::istream& input) 
{ 
    using boost::property_tree::ptree; 
    ptree pt; 

    boost::property_tree::read_json(input, pt); 

    BOOST_FOREACH(ptree::value_type &node, pt.get_child("some_nodes")) 
    { 
     std::string id; 
     unsigned int number1; 
     bool flag1; 
     bool flag2; 

     id = node.second.get<std::string>("id"); 
     number1 = node.second.get<unsigned int>("number1"); 
     flag1 = node.second.get<bool>("flag1"); 
     flag2 = node.second.get<bool>("flag2"); 
    } 
} 

有人可以告诉我'第二'是什么意思吗?

这里是JSON例子程序读取:

{ 
    "some_nodes" : 
    [ 
      { 
        "id"   : "vader", 
        "number1"  : "1024", 
        "flag1"  : "false", 
        "flag2"  : "true", 
      }, 
      { 
        "id"   : "anakin", 
        "number1"  : "4096", 
        "flag1"  : "true", 
        "flag2"  : "true",  
      } 
    ] 
} 

还有一个问题,我还当我尝试编译代码碰到下面的错误。这是什么意思,我该如何解决它?

Invalid arguments ' 
Candidates are: 
boost::foreach_detail_::foreach_reference<#0,#1>::type deref(const boost::foreach_detail_::auto_any_base &, boost::foreach_detail_::type2type<#0,#1> *) 
' 

非常感谢。

+0

这将有助于发布一个xml/json /无论这段代码读取的例子。 – 2012-08-10 12:55:29

+0

加入帖子.. – minyatur 2012-08-10 12:56:46

回答

1

ptree中:: value_type的定义是这样的:

typedef std::pair< const Key, self_type > value_type; 

所以它只是一个std ::对。 你的JSON的根节点是数组“some_nodes”。 当你迭代你的属性树时,你遍历所有的“some_nodes”子元素。

  • 第一场是关键(在这种情况下,因为你迭代所有根的子节点隐含的)。我想你的情况node.first总是“some_nodes”。
  • 第二个是值(密钥的子节点:另一个ptree)。在这种情况下,在每次迭代中,第二个是数组的第i个未命名对象。
+0

哦,现在有道理!非常感谢你.. – minyatur 2012-08-10 13:19:11

+0

我不熟悉JSON,所以我希望我说的是对的。我只用它与XML。在每个级别,第一个元素是父节点,第二个元素是它的一个子节点。 – Heisenbug 2012-08-10 13:21:46

+0

是的,它对我来说也是有意义的。 – minyatur 2012-08-10 13:50:11

相关问题