하루종일 인터넷 서치를 해봤지만 예제 수준 이상의 코드는 보이지 않았다.
넘겨 받을 데이터는 Array 타입의 JSON 이였는데 예제들의 설명이 충분하지 않아서 삽질을 조금 했다.
CString m_JSonResult 에 담겨 있는 Array 데이터를 파싱해서 iterateor로 값을 참조 하는 예제 코드이다.
속도는 rapidjson이 두배 정도 빠르다. 다른 라이브러리도 한두개 더 테스트를 해봐야겠다.
void CJsonTest::rapidjson()
{
rapidjson::Document jsondoc;
if (jsondoc.ParseInsitu<0>((LPSTR)(LPCTSTR)m_JSonResult).HasParseError() == false){
rapidjson::Document::ValueIterator iter = jsondoc.Begin();
for(; iter != jsondoc.End(); iter++){
rapidjson::Value& oneItem = *iter;
CString szTitle = oneItem[_T("TestTitle1")].GetString();
TRACE(_T("%s\n"),szTitle);
szTitle = oneItem[_T("TestTitle2")].GetString();
TRACE(_T("%s\n"),UTF8ToA(szTitle));
}
}else{
TRACE(_T("%s\n"),jsondoc.GetParseError());
}
}
void CJsonTest::jsoncpp()
{
Json::Value root;
Json::Reader jsondoc;
if(jsondoc.parse((LPSTR)(LPCTSTR)m_JSonResult,root)){
Json::Value::iterator iter = root.begin();
for(;iter != root.end(); iter++){
Json::Value oneItem = *iter;
CString szTitle = oneItem.get(_T("TestTitle"),_T("TEST")).asCString();
TRACE(_T("%s\n"),szTitle);
szTitle = oneItem.get(_T("TestTitle2"),_T("TEST")).asCString();
TRACE(_T("%s\n"),UTF8ToA(szTitle));
}
}else{
TRACE(_T("error\n"));
}
}
'지식창고 > 프로그램' 카테고리의 다른 글
구글 스크립트로 웹사이트 모니터링 (0) | 2014.05.30 |
---|---|
YouTube Center 사용자 스크립트 (0) | 2013.07.30 |
iview 설치 - cyberoam, syslog, centos 5 (0) | 2013.06.21 |
redmine 2.3.1 업그레이드 - pg error 발생 (0) | 2013.05.02 |
크롬 마우스 제스처 확장 (0) | 2013.04.29 |