利用C++試用JSON第三方庫JsonCpp
JSON是一個(gè)輕量級(jí)的數(shù)據(jù)定義格式,比起XML易學(xué)易用,而擴(kuò)展功能不比XML差多少,用之進(jìn)行數(shù)據(jù)交換是一個(gè)很好的選擇
JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用于標(biāo)記javascript對(duì)象的,詳情參考http://www.json.org/。
本文選擇第三方庫JsonCpp來解析json,JsonCpp是比較出名的c++解析庫,在json官網(wǎng)也是首推的。
JsonCpp簡(jiǎn)介
JsonCpp主要包含三種類型的class:Value Reader Writer。
jsoncpp中所有對(duì)象、類名都在namespace json中,包含json.h即可。
注意: Json::Value只能處理ANSI類型的字符串,如果C++程序使用Unicode編碼的,***加一個(gè)Adapt類來適配。
下載和編譯
本文運(yùn)行環(huán)境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0
下載地址是:http://sourceforge.net/projects/jsoncpp/
解壓之后得到j(luò)soncpp-src-0.5.0文件夾,我們只需要jsoncpp的頭文件和cpp文件,其中jsonscpp的頭文件位于jsoncpp-src-0.5.0includejson,jsoncpp的cpp文件位于jsoncpp-src-0.5.0srclib_json。
這里我列出我們的工作目錄:
jsoncpp/ //工作目錄
|-- include //頭文件根目錄
| |-- json //json頭文件,對(duì)應(yīng)jsoncpp-src-0.5.0includejson
|-- src //cpp源碼文件根目錄
|-- json //jsoncpp源碼文件,對(duì)應(yīng)jsoncpp-src-0.5.0srclib_json
|-- main.cpp //我們的主函數(shù),調(diào)用jsoncpp的示例代碼
|-- makefile //makefile,不用我們多說了吧,不懂請(qǐng)看我博客的makefile***實(shí)踐
反序列化Json對(duì)象
假設(shè)有一個(gè)json對(duì)象如下:
- {
- "name": "json″,
- "array": [
- {
- "cpp": "jsoncpp"
- },
- {
- "java": "jsoninjava"
- },
- {
- "php": "support"
- }
- ]
- }
我們要實(shí)現(xiàn)這個(gè)json的反序列號(hào)代碼如下:
- voidreadJson() {
- usingnamespacestd;
- std::stringstrValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";
- Json::Reader reader;
- Json::Value value;
- if(reader.parse(strValue, value))
- {
- std::stringout= value["name"].asString();
- std::cout <<out<<std::endl;
- constJson::Value arrayObj = value["array"];
- for(unsigned inti = 0;i <arrayObj.size(); i++)
- {
- if(!arrayObj[i].isMember("cpp"))
- continue;
- out= arrayObj[i]["cpp"].asString();
- std::cout <<out;
- if(i != (arrayObj.size() - 1))
- std::cout <<std::endl;
- }
- }
- }
序列化Json對(duì)象
- voidwriteJson() {
- usingnamespacestd;
- Json::Value root;
- Json::Value arrayObj;
- Json::Value item;
- item["cpp"] = "jsoncpp";
- item["java"] = "jsoninjava";
- item["php"] = "support";
- arrayObj.append(item);
- root["name"] = "json";
- root["array"] = arrayObj;
- root.toStyledString();
- std::stringout= root.toStyledString();
- std::cout <<out<<std::endl;
- }
完整代碼下載
下載之后,執(zhí)行以下命令
unzip jsoncpp.zip
cd jsoncpp
make
./main
原文:http://www.cnblogs.com/ggjucheng/archive/2012/01/03/2311107.html
【編輯推薦】
- jQuery實(shí)現(xiàn)仿百度搜索時(shí)的下拉列表
- 教你開發(fā)一款極為簡(jiǎn)單實(shí)用的jQuery圖表插件
- jQuery+PHP實(shí)戰(zhàn)實(shí)現(xiàn)瀏覽更多內(nèi)容
- jQuery實(shí)戰(zhàn)開發(fā)表單驗(yàn)證與自動(dòng)完成提示插件
- 從零開始學(xué)習(xí)jQuery之必知的工具函數(shù)