2012-08-10 5 views
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"); 
    } 
} 

'제 2의'의미는 무엇입니까?

여기에 프로그램이 읽고있는 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> *) 
' 

고마워요.

+0

이 코드가 읽는 xml/json/예제를 게시하는 것이 도움이됩니다. –

+0

게시물에 추가 ... – minyatur

답변

1

ptree :: VALUE_TYPE은 이런 식으로 정의된다 :

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

는 그래서 단순히 표준 : : 쌍입니다. JSON의 루트 노드는 "some_nodes"배열입니다. 속성 트리를 반복 할 때 모든 "some_nodes"자식을 반복합니다.

  • 첫 번째 필드 (모든 루트의 자식 노드를 반복하기 때문에이 경우 암시 적)의 핵심입니다. 나는 당신의 경우에 node.first가 항상 "some_nodes"라고 가정합니다.
  • second는 값 (키의 자식 노드 : 다른 ptree)입니다. 이 경우 각 반복마다 배열의 i 번째 명명되지 않은 객체가 있습니다.
+0

오, 이제 그 말이! 고마워요. – minyatur

+0

JSON에 익숙하지 않아서 제가 말한 것이 옳다는 것을 희망합니다. XML과 함께 사용했을뿐입니다. 각 레벨에서 첫 번째 요소는 부모 노드이고 두 번째 요소는 해당 요소 중 하나입니다. – Heisenbug

+0

네, 확실히 저에게도 의미가 있습니다. – minyatur