jsoncpp之初体验
生活随笔
收集整理的這篇文章主要介紹了
jsoncpp之初体验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考文章?http://blog.csdn.net/JoeBlackzqq/article/details/9043315?, 我將里面的代碼做在了一個工程親自體驗了下。
1. 下載jsoncpp源碼, 地址:?http://nchc.dl.sourceforge.net/project/jsoncpp/jsoncpp/0.5.0/jsoncpp-src-0.5.0.tar.gz
2. 編譯json,生成靜態lib文件
源碼解壓后,結構如下:
我的jsoncpp解壓后存放目錄為:D:\Desktop\jsoncpp-src-0.5.0, 打開其中的D:\Desktop\jsoncpp-src-0.5.0\makefiles\vs71\jsoncpp.sln,因為我系統上裝的是vc2010,所以會出現版本轉換窗口,按默認即可!
修改工程屬性如下:
編譯,應該會生成lib_json.lib文件,至此,靜態庫就生成了!
3. 新建win32控制臺工程json_app1, 添加代碼(m.cpp):
/*jsoncpp初體驗, jsoncpp源代碼下載地址:http://nchc.dl.sourceforge.net/project/jsoncpp/jsoncpp/0.5.0/jsoncpp-src-0.5.0.tar.gz環境: vc2010下編譯出來的json.lib編譯json.lib前,需設置工程屬性: Release: 配置屬性 -> C/C++ -> 代碼生成: 運行庫="多線程 DLL (/MD)"Debug: 配置屬性 -> C/C++ -> 代碼生成: 運行庫=多線程調試 DLL (/MDd)" json_app1的屬性設置要與調用的json.lib的工程屬性一致,否則會出錯的! */#include <stdio.h> #include <iostream> #include <json.h>using namespace std; using namespace Json;void test_Json_FastWriter(Value &root) {FastWriter fastwriter;cout << fastwriter.write(root) << endl; }void test_Json_StyledWriter(Value &root) {StyledWriter styled_writer;cout << styled_writer.write(root) << endl; }bool test_Json_Reader() {Reader reader;Value json_object;const char* jsonString = "{\"age\" : 26, \"name\" : \"huchao\"}";if (!reader.parse(jsonString, json_object))return false;// 錯誤的輸出方式cout << json_object["name"]; // cout的運行算符"<<"并沒有對Json::Value類型的重載,所以這種使用方式得到的結果并不可靠cout << json_object["age"]; // 這種輸出方式會自動在輸出內容后換行cout << json_object["name"] << json_object["age"]; // 錯誤的輸出方式,因為會自動在輸出一個Json::Value對象后自動換行,與預期的不一樣吧!cout << "-----------------------------------------------------" << endl;// 正確的輸出方式cout << json_object["name"].asCString() << endl; // 這才是正確的輸出方式cout << json_object["age"].asInt() << endl;cout << json_object["name"].asCString() << ", " << json_object["age"].asInt() << endl;// printf("name=[%s], age=[%d]\n", json_object["name"], json_object["age"]); // 錯誤的輸出方式, 因為json_object["xx"]是一個Json::Value類型printf("name=[%s], age=[%d]\n", json_object["name"].asCString(), json_object["age"].asInt()); // 正確的輸出方式return true; }int main() {Value json_temp; // 臨時對象,供如下代碼使用json_temp["name"] = Value("huchao");json_temp["age"] = Value(26);Value root; // 表示整個 json 對象root["key_string"] = Value("value_string"); // 新建一個 Key(名為:key_string),賦予字符串值:"value_string"。root["key_number"] = Value(12345); // 新建一個 Key(名為:key_number),賦予數值:12345。root["key_boolean"] = Value(false); // 新建一個 Key(名為:key_boolean),賦予bool值:false。root["key_double"] = Value(12.345); // 新建一個 Key(名為:key_double),賦予 double 值:12.345。root["key_object"] = json_temp; // 新建一個 Key(名為:key_object),賦予 json::Value 對象值。root["key_array"].append("array_string"); // 新建一個 Key(名為:key_array),類型為數組,對第一個元素賦值為字符串:"array_string"。root["key_array"].append(1234); // 為數組 key_array 賦值,對第二個元素賦值為:1234。ValueType type = root.type(); // 獲得 root 的類型,此處為objectValue 類型test_Json_FastWriter(root);test_Json_StyledWriter(root);test_Json_Reader();return 0; }/* 運行情況: {"key_array":["array_string",1234],"key_boolean":false,"key_double":12.3450,"key_number":12345,"key_object":{"age":26,"name":"huchao"},"key_string":"v alue_string"}{ "key_array" : [ "array_string", 1234 ], "key_boolean" : false, "key_double" : 12.3450, "key_number" : 12345, "key_object" : { "age" : 26, "name" : "huchao" }, "key_string" : "value_string" }"huchao" // 自動換行了,不符合預期 26 "huchao" 26 ----------------------------------------------------- huchao // 手工換行,符合預期 26 huchao, 26 name=[huchao], age=[26]*/將json的頭文件和剛才生成的lib庫添加一下(略),生成m.exe,運行即可看到結果!
下面是我的json_app1的屬性配置:
總結
以上是生活随笔為你收集整理的jsoncpp之初体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对特朗普获胜感到意外? 那你是被社交媒体
- 下一篇: 《妈妈是孩子最好的老师》读后感