を使用して、リスト内の要素の範囲にアクセスできるはずですboost::property_tree::equal_range
。使用しているフォーマットの JSON では、リスト内の各項目に関連付けられた name 要素はありません。これは、範囲内の子要素にアクセスする前に、親ノードを取得する必要があることを意味します。
以下のコードは、適応できる大雑把な例です。
入力 Json ファイル (.json) :
{
"root" :
{
"list" : [1,2,3,4,5]
}
}
リストの n 番目の要素を出力する関数:
void display_list_elem( const ptree& pt, unsigned idx )
{
// note: the node elements have no name value, ergo we cannot get
// them directly, therefor we must access the parent node,
// and then get the children separately
// access the list node
BOOST_AUTO( listNode, pt.get_child("root.list") );
// get the children, i.e. the list elements
std::pair< ptree::const_assoc_iterator,
ptree::const_assoc_iterator > bounds = listNode.equal_range( "" );
std::cout << "Size of list : " << std::distance( bounds.first, bounds.second ) << "\n";
if ( idx > std::distance( bounds.first, bounds.second ) )
{
std::cerr << "ERROR Index too big\n";
return;
}
else
{
std::advance( bounds.first, idx );
std::cout << "Value @ idx[" << idx << "] = "
<< bounds.first->second.get_value<std::string>() << "\n";
}
std::cout << "Displaying bounds....\n";
display_ptree( bounds.first->second, 10 );
}