在C++環境中使用JsonCpp讀寫Json資料

來源:互聯網
上載者:User

標籤:col   json   target   javascrip   .json   項目   targe   sam   blank   

JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的資料交換格式。通常用於資料交換或儲存。

JsonCpp是一個基於C++語言的開源庫,用於C++程式的Json資料的讀寫操作。

 

JsonCpp是一個開源庫

:https://github.com/open-source-parsers/jsoncpp

文檔地址:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html

 

使用

官方提供的整合方案:https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated

其中最簡單的方法是執行項目根目錄中的python指令碼,構建標頭檔和源檔案。

1. 在安裝Python環境的控制台中進入jsoncpp項目根目錄,

2. 執行命令:

python amalgamate.py

3. 將產生的dist目錄拷貝到自己的項目中,其中封裝來源檔案jsoncpp.cpp和標頭檔json.h、json-forwards.h

 

基本類和方法

使用jsoncpp庫時需要包含標頭檔#include <json/json.h>(包含目錄根據需要修改)

方法命名空間:Json

常用類

Value:用於儲存Json資料

CharReader:從字串中讀取Json資料的抽象類別

CharReaderBuilder:CharReader類的實現,可以讀取標準輸入資料流中的資料

 

Demo

定義Json資料結構,並輸出資料

Json::Value jsonRoot; //定義根節點Json::Value jsonItem; //定義一個子物件jsonItem["item1"] = "one"; //添加資料jsonItem["item2"] = 2;jsonRoot.append(jsonItem); jsonItem.clear(); //清除jsonItem
jsonItem["item1.0"] = 1.0;jsonItem["item2.0"] = 2.0;jsonRoot["item"] = jsonItem;cout << jsonRoot.toStyledString() << endl; //輸出到控制台

 

將Json寫入到檔案

ofstream ofs; //標準輸出資料流ofs.open("sample.json"); //建立檔案ofs << jsonRoot.toStyledString(); //輸出ofs.close();

 

從檔案讀取Json資料

ifstream ifs; //標準輸入資料流ifs.open("sample.json");
jsonRoot.clear();
Json::CharReaderBuilder builder;builder["collectComments"] = false;JSONCPP_STRING errs;if (!parseFromStream(builder, ifs, &jsonRoot, &errs)) //從ifs中讀取資料到jsonRoot{ return;}

 

從字串讀取Json資料

string jsonStr = jsonRoot.toStyledString(); //json字串jsonRoot.clear();
Json::CharReaderBuilder builder;builder["collectComments"] = false;JSONCPP_STRING errs;Json::CharReader* reader = builder.newCharReader();if (!reader->parse(jsonStr.data(), jsonStr.data() + jsonStr.size(), &jsonRoot, &errs)) //從jsonStr中讀取資料到jsonRoot{ return;}

 

擷取Json中的索引值對

for (auto i = 0; i < jsonRoot.size(); i++){    for (auto sub= jsonRoot[i].begin(); sub != jsonRoot[i].end(); sub++)    {        cout << sub.name() << " : " << jsonRoot[i][sub.name()] << endl;    }}

 

在C++環境中使用JsonCpp讀寫Json資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.