1.简介
Jsoncpp 是一个 C++ 库,用于解析和生成 JSON 数据。它提供了一个易于使用的 DOM(Document Object Model)风格的 API,允许开发者以树形结构的方式操作 JSON 数据。
Jsoncpp 是一个C++库,允许操作JSON值,包括对字符串的序列化和反序列化。它还可以在非序列化/序列化步骤中保留现有注释,使其成为存储用户输入文件的方便格式。
JSONCpp 的主要特点包括:
- DOM 风格 API:Jsoncpp 提供了类似 JavaScript 的对象和数组操作方式,使得操作 JSON 数据变得直观。
- 解析和生成:Jsoncpp 可以解析 JSON 字符串并将其转换为 C++ 对象,也可以将 C++ 对象转换为 JSON 字符串。
- 异常处理:Jsoncpp 在解析错误时抛出异常,允许开发者以异常处理机制来管理错误。
- 跨平台
版本说明:
- 1.y.z是用C++11构建的。
- 0.y.z可以与较旧的编译器一起使用。
- 00.11.z既可以在旧编译器中使用,也可以在新编译器中使用。
主要版本保持二进制兼容性。
2.环境搭建
下载地址:https://github.com/open-source-parsers/jsoncpp
选择1.95版本,使用C++11构建的。
编译,使用cmake编译
编译完成生成库。
配置包含目录和lib目录。
3.代码示例
写文件
#include <iostream> #include <json/json.h> #include <iostream> #include <fstream> using namespace std; int main() { Json::Value root; // 添加一些数据 root["name"] = "John Doe"; root["age"] = 30; root["sex"] = "male"; // 创建一个 JSON 数组 root["courses"].append("Math"); root["courses"].append("Physics"); root["courses"].append("Chemistry"); //新建两个value对象,作为calssmate的值 Json::Value classmate1; classmate1["name"] = "lisi"; classmate1["age"] = "20"; classmate1["sex"] = "male"; Json::Value classmate2; classmate2["name"] = "wangwu"; classmate2["age"] = "20"; classmate2["sex"] = "male"; root["classmate"].append(classmate1); root["classmate"].append(classmate2); //输出带格式的字符串 Json::StyledWriter sw; //输出到文件 std::ofstream os; os.open("test.json", ios::out); if (!os.is_open()) cout << "can not find or create test.json" << endl; os << sw.write(root); os.close(); }
复制
运行结果:
读取json解析:
#include <iostream> #include <json/json.h> #include <iostream> #include <fstream> using namespace std; int main() { Json::Reader read; Json::Value root; //读取json文件 ifstream in("test.json"); //解析到root read.parse(in, root); //按键值对读取 Json::Value::Members keys = root.getMemberNames(); for (int i = 0; i < keys.size(); i++) { cout << keys.at(i) << " : "; if (root[keys[i]].isString()) { cout << root[keys[i]].asString(); } if (root[keys[i]].isInt()) { cout << root[keys[i]].asInt(); } else if (root[keys[i]].isArray()) { cout << "[ "; for (int j = 0; j < root[keys[i]].size(); j++) { Json::Value item = root[keys[i]][j]; if (item.isString()) { cout << item.asString() << ", "; } else if (item.isObject()) { cout << "{ " << endl;; Json::Value::Members subItems = item.getMemberNames(); for (int k = 0; k < subItems.size(); k++) { cout << subItems.at(k) << " : " << item[subItems[k]] << endl; } cout << "}" << endl; } } cout << "]"; } cout << endl; } return 0; }
复制
运行结果:
4.更多参考
libVLC 专栏介绍-CSDN博客
Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客
QCharts -1.概述-CSDN博客
JSON++介绍
RapidJSON介绍