jsoncpp之初体验
生活随笔
收集整理的這篇文章主要介紹了
jsoncpp之初体验
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
參考文章?http://blog.csdn.net/JoeBlackzqq/article/details/9043315?, 我將里面的代碼做在了一個工程親自體驗(yàn)了下。
1. 下載jsoncpp源碼, 地址:?http://nchc.dl.sourceforge.net/project/jsoncpp/jsoncpp/0.5.0/jsoncpp-src-0.5.0.tar.gz
2. 編譯json,生成靜態(tài)lib文件
源碼解壓后,結(jié)構(gòu)如下:
我的jsoncpp解壓后存放目錄為:D:\Desktop\jsoncpp-src-0.5.0, 打開其中的D:\Desktop\jsoncpp-src-0.5.0\makefiles\vs71\jsoncpp.sln,因?yàn)槲蚁到y(tǒng)上裝的是vc2010,所以會出現(xiàn)版本轉(zhuǎn)換窗口,按默認(rèn)即可!
修改工程屬性如下:
編譯,應(yīng)該會生成lib_json.lib文件,至此,靜態(tài)庫就生成了!
3. 新建win32控制臺工程json_app1, 添加代碼(m.cpp):
/*jsoncpp初體驗(yàn), jsoncpp源代碼下載地址:http://nchc.dl.sourceforge.net/project/jsoncpp/jsoncpp/0.5.0/jsoncpp-src-0.5.0.tar.gz環(huán)境: vc2010下編譯出來的json.lib編譯json.lib前,需設(shè)置工程屬性: Release: 配置屬性 -> C/C++ -> 代碼生成: 運(yùn)行庫="多線程 DLL (/MD)"Debug: 配置屬性 -> C/C++ -> 代碼生成: 運(yùn)行庫=多線程調(diào)試 DLL (/MDd)" json_app1的屬性設(shè)置要與調(diào)用的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的運(yùn)行算符"<<"并沒有對Json::Value類型的重載,所以這種使用方式得到的結(jié)果并不可靠cout << json_object["age"]; // 這種輸出方式會自動在輸出內(nèi)容后換行cout << json_object["name"] << json_object["age"]; // 錯誤的輸出方式,因?yàn)闀詣釉谳敵鲆粋€Json::Value對象后自動換行,與預(yù)期的不一樣吧!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"]); // 錯誤的輸出方式, 因?yàn)閖son_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),賦予數(shù)值: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),類型為數(shù)組,對第一個元素賦值為字符串:"array_string"。root["key_array"].append(1234); // 為數(shù)組 key_array 賦值,對第二個元素賦值為:1234。ValueType type = root.type(); // 獲得 root 的類型,此處為objectValue 類型test_Json_FastWriter(root);test_Json_StyledWriter(root);test_Json_Reader();return 0; }/* 運(yùn)行情況: {"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" // 自動換行了,不符合預(yù)期 26 "huchao" 26 ----------------------------------------------------- huchao // 手工換行,符合預(yù)期 26 huchao, 26 name=[huchao], age=[26]*/將json的頭文件和剛才生成的lib庫添加一下(略),生成m.exe,運(yùn)行即可看到結(jié)果!
下面是我的json_app1的屬性配置:
總結(jié)
以上是生活随笔為你收集整理的jsoncpp之初体验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对特朗普获胜感到意外? 那你是被社交媒体
- 下一篇: 《妈妈是孩子最好的老师》读后感