2013-06-16 3 views
0

내 엔진의 "장면"파일에 JSON을 사용하고 있습니다. 그것은 다음과 같습니다 C++ JSON 장면 파일 읽기

{ 
"thorium": { 
"name" : "JustAnotherMap", 
"desc" : "A Map file", 

"actor": { 
"type" : "Volume", 
"name" : "m_pActor1", 
"rotation" : "0.0 0.0 0.0", 
"position" : "0.0 0.0 0.0" 
} 
} 
} 

그래서 내가이 글을 읽을 수 있도록하려면 예를 들어,이 정규식 작업인가 등의 이름 m_pActor1와 객체 VolumeActor을 만들? 충돌 정보가 너무 많아서 어떻게 접근해야하는지 잘 모르겠습니다.

+0

정규식 대신 [Boost property tree] (http://www.boost.org/doc/libs/1_53_0/doc/html/property_tree.html) 라이브러리를 사용하는 것이 좋습니다. 좋은 JSON 파서 (http://www.boost.org/doc/libs/1_53_0/doc/html/boost_propertytree/parsers.html#boost_propertytree.parsers.json_parser)가 있습니다. –

답변

1

JSON 구문에 균형 잡힌 중괄호가 포함되어있어 context-free language이됩니다. 정규식은 regular languages으로 알려진 간단한 언어를 구문 분석하기위한 도구입니다. Chomsky hierarchy을 참조하십시오.

즉, 오늘날 사용되는 대부분의 정규 표현식 엔진에는 더 강력 해지고 엄격하게 규칙이 아닌 언어를 구문 분석 할 수있는 확장이 포함되어 있습니다. 여기에는 균형 잡힌 중괄호 구문 분석이 포함됩니다.

그러나 작업을 수행하는 정규 표현식은 추악 할 것이며, 이식성이없는 기능에 의존하게 될 수 있으며 JSON 데이터의 구조 변경에도 불구하고 유지 관리해야 할 악몽이 될 것입니다.

적절한 JSON 파서를 사용해야합니다. the one from Boost.

+0

그래서 각 액터에 대해 구조체를 만들고 ptree를 통과하는 반복기를 사용해야하고 "액터"가 노드 이름 인 경우 구조체를 생성해야합니까? – dextaa