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",     
            }
    ]
}

もう1つの質問ですが、コードをコンパイルしようとすると、次のエラーも発生します。これはどういう意味ですか、どうすれば解決できますか?

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

どうもありがとう。

4

1 に答える 1

1

ptree::value_type は次のように定義されます。

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

したがって、それは単なる std::pair です。JSON のルート ノードは配列「some_nodes」です。プロパティ ツリーを反復処理すると、すべての「some_nodes」の子を反復処理します。

  • 最初のフィールドがキーです (すべてのルートの子ノードを反復しているため、この場合は暗黙的です)。あなたの場合、node.firstは常に「some_nodes」だと思います。
  • 2 番目は値です (キーの子ノード: 別の ptree)。この場合、各反復秒で、配列の i 番目の名前のないオブジェクトになります。
于 2012-08-10T13:16:01.723 に答える