初探JsonCpp - 編譯與基本使用
JSON(JavaScript Object Notation,JS 物件標記) 是一種輕量級的資料交換格式。它基於 ECMAScript (w3c制定的js規範)的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。易於人閱讀和編寫,同時也易於機器解析和生成,有效地提升了網路傳輸效率。
本文主要介紹 JSON 第三方解析庫 JsonCpp 的安裝編譯過程以及基本使用。
編譯
在 https://sourceforge.net/projects/jsoncpp/ 我們可以獲取到 JsonCpp 庫。
CentOS上 的編譯過程如下:
1)解壓縮。
2)在編譯生成動態和靜態庫之前,我們需要安裝 linux 下的自動構建工具 scons,步驟如下圖。
解壓縮,然後進入目錄 scons-2.2.0。
3)利用自動構建工具 scons 生成所需的 libjson,操作如圖。
執行完畢,會在目錄 jsoncpp-src-0.5.0/libs/linux-gcc-4.4.7 下生成庫檔案:
然後,將動態連結庫 libjson_linux-gcc-4.4.7_libmt.so 新增到搜尋路徑中。
至此,編譯就完成了,接下來我們來看看 JsonCpp 的基本使用。
基本使用
(1)JsonCpp簡介
JsonCpp 主要包含三種型別的class:Value、Reader和Writer:
①Json::Value 是 JsonCpp 中最基本、最重要的類,用於表示各種型別的物件,JsonCpp 支援的物件型別可見 Json::ValueType 列舉值。
②Json::Reader 是用於讀取的,說的確切點,是用於將字串轉換為 Json::Value 物件的。
③Json::Writer 類是一個純虛類,並不能直接使用。我們一般使用 Json::Writer 的子類:Json::FastWriter、Json::StyledWriter 和 Json::StyledStreamWriter。
(2)使用示例
1)示例1:從字串中讀取JSON
程式碼如下:
#include "json/json.h"
#include <iostream>
using namespace std;
int main()
{
const char* strValue = "{\"name\":\"json\",\"gender\":\"male\",\"height\":175,\"weight\":65}";
Json::Reader reader;
Json::Value value;
if(reader.parse(strValue, value))
{
string name = value["name"].asString();
string gender = value["gender"].asString();
int height = value["height"].asInt();
int weight = value["weight"].asInt();
cout << "name: " << name << endl;
cout << "gender:" << gender << " height:" << height << "cm weight:" << weight << "kg" << endl;
}
return 0;
}
執行結果:
2)示例2:從檔案中讀取JSON
待解析的檔案內容如下:
{
"name": "json",
"array": [
"123",
"456",
"789"
]
}
程式碼如下:
#include "json/json.h"
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream is;
is.open("JsonText", ios::binary);
Json::Reader reader;
Json::Value value;
if(reader.parse(is, value))
{
if(!value["name"].isNull())
{
cout << value["name"].asString() << endl;
Json::Value arrayObj = value["array"];
for(int i = 0; i < arrayObj.size(); i++)
{
cout << arrayObj[i].asString() << endl;
}
}
}
return 0;
}
執行結果:
3)示例3:程式生成JSON資料
程式碼如下:
#include "json/json.h"
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
Json::Value value;
Json::Value arrayObj;
for(int i = 0; i < 2; i++)
{
arrayObj.append(i);
}
value["key1"] = "value1";
value["key2"] = "value2";
value["array"] = arrayObj;
// 直接輸出
cout << "FastWriter:" << endl;
Json::FastWriter fw;
cout << fw.write(value) << endl;
// 縮排輸出
cout << "StyledWriter:" << endl;
Json::StyledWriter sw;
cout << sw.write(value) << endl;
// 輸出到檔案
ofstream os;
os.open("JsonTest");
os << sw.write(value);
os.close();
return 0;
}
執行結果:
參考資料:
1.【C++】JSON檔案的讀取和生成. https://my.oschina.net/Tsybius2014/blog/289527
2.C++ Jsoncpp原始碼編譯與解析Json. http://www.cnblogs.com/xudong-bupt/p/3696329.html
相關文章
- mingw編譯jsoncpp 轉載編譯JSON
- Java編譯與反編譯Java編譯
- protobuf 編譯工具安裝與使用編譯
- nginx 編譯安裝與配置使用Nginx編譯
- Android反編譯和微信機器人初探Android編譯機器人
- jsoncpp 介紹JSON
- 使用makefile編譯編譯
- Rust 交叉編譯與條件編譯總結Rust編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- Android 反編譯初探 應用是如何被注入廣告的Android編譯
- 20210125-1 文字編輯器與計算機基本使用計算機
- Java程式碼的編譯與反編譯那些事兒Java編譯
- linux與windows交叉編譯LinuxWindows編譯
- Markdown編輯器的基本使用
- gdb 檢視 jsoncpp物件JSON物件
- [Web翻譯]JavaScript中的編譯與填充WebJavaScript編譯
- 比特幣原始碼研讀(0)bitcoin本地編譯與使用比特幣原始碼編譯
- python程式碼混淆與編譯Python編譯
- 後端編譯與優化後端編譯優化
- Xopsed的編譯與安裝編譯
- Natasha 4.0 探索之路系列(三) 基本的動態編譯編譯
- dva使用yarn編譯出錯Yarn編譯
- Typora編譯器使用方法編譯
- C編譯: 使用gdb除錯編譯除錯
- Rust 編譯器探索使用 PGORust編譯Go
- 使用 Nginx 編譯 Sass 和 ScssNginx編譯CSS
- 使用 ccache 增加 Xcode 編譯速度XCode編譯
- 核心與裝置樹編譯與燒寫編譯
- 初探webpack之編寫loaderWeb
- SVC 分級編碼初探
- Windows10 VS2017 C++ Json解析(使用jsoncpp庫)WindowsC++JSON
- Docker的基本使用及DockerFile的編寫Docker
- git 部署與基本配置使用Git
- vim基本配置與使用技巧
- 使用ilasm 和 ildasm編譯和反編譯工具對DLL檔案修改ASMLDA編譯
- SciTech-BigDataAIML-TensorFlow-Model的編譯:設定(LossFunction+Optimizer+Metrics)與編譯AI編譯Function
- MongoDB使用初探MongoDB
- 【譯】使用 GitHub Copilot 編寫 Git 提交Github
- protobuf 的交叉編譯使用(C++)編譯C++