9

これは単純なはずです(私はブーストを学んでいるので、何かが欠けています)

json_read を使用していくつかの単純な JSON を読み込んだところ、ptree が作成されました。Web 上のすべての例では、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() に入力したもの) とそれに対応する値を書き出します。

これが単純だったらごめんなさい

ロス

4

5 に答える 5

17

同じことを探していたのですが、どこにも答えが見つかりませんでした。それは確かに非常に単純であることが判明しました:

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()は第1レベルのエントリ値です。iter->second.begin()(その後、 /を使用して繰り返してend()、より深いレベルにすることができます。)

さらに、この反復でそのようなノードの1つがターミナルノードではなく、それ自体がptreeである場合、このイテレータ自体からptreeとして取得できます。 ptree subPt = iter->second.get_child("nodeName");

于 2012-05-23T14:35:53.793 に答える
2

私もptreeに問題がありますが、おそらくこれが役立つでしょう:boostのptreeクイックチュートリアルをチェックしてください

v.{entry_name}

v.firstになります

v.{値}
v.second.data()

それはうまくいくでしょうか?

于 2011-07-18T15:30:48.313 に答える
1

これは、BOOST_FOREACHhttp : //akrzemi1.wordpress.com/2011/07/13/parsing-xml-with-boost/を使用してptreeを反復処理する方法の優れた例です。

通常の「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 十分にドキュメント化されていないことはわかっていますが、役に立ちます。

于 2012-11-05T09:38:28.907 に答える