VS 2013 MFCに基づくJSONファイルの書き込みと解析

4639 ワード

1.JSONファイルの書き込み
一般的なテキストファイルの書き込みと同様です.
CFile cf;
if (cf.Open(strFileWeather, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone) == FALSE)  //strFileWeather JSON   
{       
    return ;
}
char cReadBuffer[4096] = {0};
cf.Write(cReadBuffer, 4089);
cf.Close();

2.JSONファイルの解析
ヘッダファイルを追加
#include 
#pragma comment(lib,"Kernel32.lib")
#include

「追加」lib_json.lib”
リンクの追加->入力->依存項目の追加lib_json.lib
コードの追加
    CFile cf;
    if (cf.Open(strJSONFile, CFile::modeRead | CFile::shareDenyNone) == FALSE)
    {
        return;
    }
    DWORD length = (DWORD)cf.GetLength();
    if (length < 1)
    {
        cf.Close();
        return;
    }
    char* pdata = new char[length];
    if (pdata == NULL)
    {
        cf.Close();
        return;
    }
    if (cf.Read(pdata, length) != length)
    {
        delete[]pdata;
        cf.Close();
        return;
    }
    cf.Close();
    std::string ss = pdata;         //        
    delete[]pdata;
    Json::Reader reader;
    Json::Value root;
    if (!reader.parse(ss, root, false))
    {
        return;     //    
    }
    CString str;
    Json::Value item, item2, item3;
    #define def_weather_readjson_get_str2(a, b, c)  c=item2[a][b].asString().c_str();
    item = root["Net_Header"]; //NetHeader JSON      ,      
    int i, j, size3, size2, size = item.size();
    if (size < 1)
    {
        return;
    } 
    CString ct_str = ct.Format(_T("%Y-%m-%d"));
    i = 0;
    item2 = item[i]["daily_forecast"];
    size2 = item2.size();
    for (j = 0; j < size2; j++)     //        ,       
    {
        def_weather_readjson_get_str2(j, "date", str);
        if (str == ct_str)
            break;
    }
    if (j == size2)
    {
        return;
    }
    //  
    item3 = item2[j]["cond"];       //         
    size3 = item3.size();
    if (size3 < 1)
    {
        return;
    }
    TCHAR weather[32];
    int temp_d, temp_n;
    str = item3["code_d"].asString().c_str(); //    code_d      
    str = item3["code_n"].asString().c_str(); //    code_n      

注意:ソースコードは天気情報の取得を例に挙げます.