利用C++試用JSON第三方庫JsonCpp
JSON是一個輕量級的數據定義格式,比起XML易學易用,而擴展功能不比XML差多少,用之進行數據交換是一個很好的選擇
JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用于標記javascript對象的,詳情參考http://www.json.org/。
本文選擇第三方庫JsonCpp來解析json,JsonCpp是比較出名的c++解析庫,在json官網也是首推的。
JsonCpp簡介
JsonCpp主要包含三種類型的class:Value Reader Writer。
jsoncpp中所有對象、類名都在namespace json中,包含json.h即可。
注意: Json::Value只能處理ANSI類型的字符串,如果C++程序使用Unicode編碼的,***加一個Adapt類來適配。
下載和編譯
本文運行環境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0
下載地址是:http://sourceforge.net/projects/jsoncpp/
解壓之后得到jsoncpp-src-0.5.0文件夾,我們只需要jsoncpp的頭文件和cpp文件,其中jsonscpp的頭文件位于jsoncpp-src-0.5.0includejson,jsoncpp的cpp文件位于jsoncpp-src-0.5.0srclib_json。
這里我列出我們的工作目錄:
jsoncpp/ //工作目錄
|-- include //頭文件根目錄
| |-- json //json頭文件,對應jsoncpp-src-0.5.0includejson
|-- src //cpp源碼文件根目錄
|-- json //jsoncpp源碼文件,對應jsoncpp-src-0.5.0srclib_json
|-- main.cpp //我們的主函數,調用jsoncpp的示例代碼
|-- makefile //makefile,不用我們多說了吧,不懂請看我博客的makefile***實踐
反序列化Json對象
假設有一個json對象如下:
- {
- "name": "json″,
- "array": [
- {
- "cpp": "jsoncpp"
- },
- {
- "java": "jsoninjava"
- },
- {
- "php": "support"
- }
- ]
- }
我們要實現這個json的反序列號代碼如下:
- 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對象
- 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;
- }
完整代碼下載
下載之后,執行以下命令
unzip jsoncpp.zip
cd jsoncpp
make
./main
原文:http://www.cnblogs.com/ggjucheng/archive/2012/01/03/2311107.html
【編輯推薦】
- jQuery實現仿百度搜索時的下拉列表
- 教你開發一款極為簡單實用的jQuery圖表插件
- jQuery+PHP實戰實現瀏覽更多內容
- jQuery實戰開發表單驗證與自動完成提示插件
- 從零開始學習jQuery之必知的工具函數