最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

2017年1月21日 星期六

Visual Studio 2010 C++ 使用 Jsoncpp

Google推播內容須使用JSON格式,套用在VC++筆者採用可以很方便使用的靜態程式庫Jsoncpp,它是跨平台開源程式碼,可直接在網路上下載取得,在引用編譯設定上會有點麻煩,但也不是很麻煩,網路上寫的內容多半不清楚,這裡就將操作方法完整說明。
使用Jsoncpp有2種,將分別做說明。
Jsoncpp下載點
sourceforge:http://sourceforge.net/projects/jsoncpp/
github:https://github.com/open-source-parsers/jsoncpp

方法一:使用靜態程式庫 (.lib)  + 標頭檔(.h)
Step 1. 使用VS2010開啟在 jsoncpp-src-0.5.0\makefiles\vs71下 jsoncpp.sln。

Step 2. 確認 Jsoncpp 編譯的 Runtime Library 為 Multi-threaded Debug DLL (/MDd),這個跟後面使用的專案編譯要設定相同的Runtime Library,確認完後執行編譯。

Step 3. 編譯 jsoncpp 後,在 jsoncpp-src-0.5.0\build\vs71\debug\lib_json 產生 json_vc71_libmtd.lib複製到要建立的專案裡。

Step 4. 建立一個名為 TestJSONCPP 專案,將 jsoncpp-src-0.5.0\build\vs71\debug\lib_json\json_vc71_libmtd.lib 與 jsoncpp-src-0.5.0\include\ 路徑下的json資料夾複製到該專案目錄下。

Step 5. 設定 TestJSONCPP 專案編譯條件。
Include Directories: C:\TestJSONCPP。

Runtime Library:Multi-threaded Debug DLL (/MDd)。

Additional Dependencies:..\json_vc71_libmtd.lib。

Step 6. 在專案檔中加入 json/json.h、json/value.h。

Step 7. 輸入以下程式碼,編譯執行。
#include "stdafx.h"
#include "TestJSONCPP.h"
#include "json/json.h"
#include "json/value.h"

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 Json::Value root;
 Json::Value script;
 Json::Value noscript;
 Json::Value language;
 Json::Value kind;
 Json::Value noscript_kind;
 Json::Value interpreter;
 Json::Value compiler;

 CString csUrl = "http://white5168.blogspot.tw/";

 //第四層
 compiler.append("C++");
 compiler.append("C#");
 noscript_kind["Compiler"] = compiler;
 interpreter.append("VB.net");
 noscript_kind["Interpreter"] = interpreter;

 //第三層
 noscript.append("C++");
 noscript.append("C#");
 noscript.append("VB.net");
 kind["Noscript"] = noscript;

 //第三層
 script.append("Python");
 script.append("GAS");
 kind["Script"] = script;

 //第三層
 kind["Noscript-kind"] = noscript_kind;

 //第二層
 language["Kind"] = kind;
 
 //第二層
 language["Count"] = 5;

 //第一層
 root["Language"] = language;
 root["Url"] = Json::Value(csUrl);
 root["Name"] = "iinfo資訊交流";

 Json::StyledWriter sw;
 string output = sw.write( root );
 CString csLanguage = output.c_str();
 printf("%s\n", csLanguage);

 return 0;
}

#include "stdafx.h"
#include "TestJSONCPP.h"
#include "json/json.h"
#include "json/value.h"

CWinApp theApp;

using namespace std;
using namespace Json;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 Value root;
 Value script;
 Value noscript;
 Value language;
 Value kind;
 Value noscript_kind;
 Value interpreter;
 Value compiler;

 CString csUrl = "http://white5168.blogspot.tw/";

 //第四層
 compiler.append("C++");
 compiler.append("C#");
 noscript_kind["Compiler"] = compiler;
 interpreter.append("VB.net");
 noscript_kind["Interpreter"] = interpreter;

 //第三層
 noscript.append("C++");
 noscript.append("C#");
 noscript.append("VB.net");
 kind["Noscript"] = noscript;

 //第三層
 script.append("Python");
 script.append("GAS");
 kind["Script"] = script;

 //第三層
 kind["Noscript-kind"] = noscript_kind;

 //第二層
 language["Kind"] = kind;
 
 //第二層
 language["Count"] = 5;

 //第一層
 root["Language"] = language;
 root["Url"] = Value(csUrl);
 root["Name"] = "iinfo資訊交流";

 StyledWriter sw;
 string output = sw.write( root );
 CString csLanguage = output.c_str();
 printf("%s\n", csLanguage);

 return 0;
}
執行結果:

方法二:使用原始程式檔(.cpp) + .標頭檔(.h)
使用相同程式碼,修改編譯環境條件。
Step 1. 確認 Additional Dependencies 沒有設定任何條件。

Step 2. 將  jsoncpp-src-0.5.0\src\下的 lib_json 資料夾複製到 TestJSONCPP 專案下。

Step 3. 設定 Source Directories 路徑為 C:\TestJSONCPP\lib_json與 設定Include Directories路徑為 C:\TestJSONCPP。

Step 4. 在專案中加入 json_value.cpp、json_writer.cpp。

Step 5. 分別對 json_value.cpp、json_writer.cpp 的 Precompiled Header 編譯條件設定為 Not Using Precompiled Headers。

注意:第5步沒做,後續無法編譯成功,重要!重要!重要!(因為很重要,所以講了3次)

執行結果:

參考資料