【问题标题】:How do we get objects in boost property tree我们如何在 boost 属性树中获取对象
【发布时间】:2012-08-10 12:52:15
【问题描述】:

我需要了解和修改示例代码。我被困在某个时候,找不到任何解决方案。代码如下:

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> *)
'

非常感谢。

【问题讨论】:

  • 这将有助于发布 xml/json/无论此代码读取的示例。

标签: c++ json boost boost-propertytree boost-foreach


【解决方案1】:

ptree::value_type 是这样定义的:

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

所以它只是一个 std::pair。 JSON 的根节点是数组“some_nodes”。 当你迭代你的属性树时,你正在迭代所有的“some_nodes”子节点。

  • 第一个字段是键(在这种情况下是隐式的,因为您正在迭代所有根子节点)。我想在你的情况下 node.first 总是“some_nodes”。
  • second 是值(键的子节点:另一个 ptree)。在这种情况下,在每次迭代中,第二个都是数组的第 i 个未命名对象。

【讨论】:

  • 我对 JSON 不熟悉,所以我希望我说的是对的。我只将它与 XML 一起使用。在每一层,第一个元素是父节点,第二个元素是它的一个子节点。
猜你喜欢
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2018-06-25
相关资源
最近更新 更多