2014-03-19 95 views
1

我有JSON文件如下。用Boost.PropertyTree解析JSON數組

{ 
    "instruments": [ 
     { 
     "minShift": -1.0, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "maxShift": 1.0, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "stepShift": 0.01, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "instrument_old": "CFH/EURUSD", 
     "instrument_new": "LMAX/EURUSD" 
     }, 
     { 
     "minShift": -1.0, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "maxShift": 1.0, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "stepShift": 0.01, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "instrument_old": "CFH/EURUSD", 
     "instrument_new": "Saxo/EURUSD" 
     }, 
     { 
     "minShift": -1.0, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "maxShift": 1.0, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "stepShift": 0.01, // opcjonalnie - jeśli brak, to taka, jak dla globalnych ustawień 
     "instrument_old": "LMAX/XAUUSD", 
     "instrument_new": "Saxo/XAUUSD" 
     } 
    ] 
} 

我想進入每一個「樂器」,並把每個領域的結構。它會使結構的矢量。

我想這種方式(但不工作不正常):

BOOST_FOREACH(ptree::value_type& node,pt.get_child("instruments")) 
{ 
    InstrumentInfo instrumentInfo; 
    instrumentInfo.shiftInfo.minShift = pt.get<double>("minShift",shiftInfo.minShift); 
    instrumentInfo.shiftInfo.maxShift = pt.get<double>("maxShift",shiftInfo.maxShift); 
    instrumentInfo.shiftInfo.stepShift = pt.get<double>("stepShift",shiftInfo.stepShift); 
    instrumentInfo.instrumentOld = pt.get<string>("instrument_old",""); 
    instrumentInfo.instrumentNew = pt.get<string>("instrument_new",""); 
    instrumentsInfo.push_back(instrumentInfo); 
} 

回答

2

我有一個答案:

BOOST_FOREACH(ptree::value_type& node,pt.get_child("instruments")) 
{ 
     InstrumentInfo instrumentInfo; 
     instrumentInfo.shiftInfo.minShift = node.second.get<double>("minShift",shiftInfo.minShift); 
     instrumentInfo.shiftInfo.maxShift = node.second.get<double>("maxShift",shiftInfo.maxShift); 
     instrumentInfo.shiftInfo.stepShift = node.second.get<double>("stepShift",shiftInfo.stepShift); 
     instrumentInfo.instrumentOld = node.second.get<string>("instrument_old",""); 
     instrumentInfo.instrumentNew = node.second.get<string>("instrument_new",""); 
     instrumentsInfo.push_back(instrumentInfo); 
}