C++ JsonCpp 使用(含源碼下載)

來源:互聯網
上載者:User
前言

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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.