標籤: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資料