1. 程式人生 > >基於VS2013MFC的JSON檔案的寫入和解析

基於VS2013MFC的JSON檔案的寫入和解析

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 <Winnls.h>
#pragma comment(lib,"Kernel32.lib") #include<fstream>

新增”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對應的字串

注:原始碼以獲取天氣資訊為例;