하루종일 인터넷 서치를 해봤지만 예제 수준 이상의 코드는 보이지 않았다.


넘겨 받을 데이터는 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"));
    }
}