基於VS2013MFC的JSON檔案的寫入和解析
阿新 • • 發佈:2019-01-27
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對應的字串