C++ 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.0\include\json,jsoncpp的cpp文件位於jsoncpp-src-0.5.0\src\lib_json。

這裏我列出我們的工作目錄:

複製代碼
jsoncpp/           //工作目錄
|-- include        //頭文件根目錄
|  |-- json       //json頭文件,對應jsoncpp-src-0.5.0\include\json
|-- src            //cpp源碼文件根目錄
  |-- json       //jsoncpp源碼文件,對應jsoncpp-src-0.5.0\src\lib_json
  |-- main.cpp   //我們的主函數,調用jsoncpp的示例代碼  

|-- makefile       //makefile,不用我們多說了吧,不懂請看我博客的makefile最佳實踐
複製代碼

 

反序列化Json對象

假設有一個json對象如下:

複製代碼
{
    "name": "json″,
    "array": [
        {
            "cpp": "jsoncpp"
        },
        {
            "java": "jsoninjava"
        },
        {
            "php": "support"
        }
    ]
}
複製代碼

我們要實現這個json的反序列號代碼如下:

複製代碼
void readJson() {
    using namespace std;
    std::string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";

    Json::Reader reader;
    Json::Value value;

    if (reader.parse(strValue, value))
    {   
        std::string out = value["name"].asString();
        std::cout << out << std::endl;
        const Json::Value arrayObj = value["array"];
        for (unsigned int i = 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對象

複製代碼
void writeJson() {
    using namespace std;

    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::string out = root.toStyledString();
    std::cout << out << std::endl;
}
複製代碼

 

完整代碼下載

點擊此處下載

下載之後,執行以下命令

unzip jsoncpp.zip
cd jsoncpp
make
./main
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章