目录一、jsoncpp是什么二、Json::Value 通用值容器三、Json::StyledWriter 格式化输出四、代码示例一、jsoncpp是什么在 C 日常开发中无论是网络通信、配置文件读写还是数据持久化JSON 都是最通用的数据交换格式。但 C 标准库至今没有内置 JSON 处理能力我们通常需要借助第三方库完成 JSON 的序列化与反序列化其中 jsoncpp 是国内项目中使用最广泛、上手门槛最低的开源实现之一。jsoncpp 是 C 开源 JSON 解析库也是 Linux C 开发中最主流的 JSON 处理方案。它的核心能力只有两个序列化将 C 内存中的数据转换成标准 JSON 格式的字符串用于网络传输、文件落盘反序列化将接收到的 JSON 字符串解析成 C 可直接读写的数据结构库中所有的类、函数和工具都封装在Json这个命名空间下我们日常写代码时用到的Json::Value、Json::StyledWriter等都属于这个命名空间。在 Ubuntu 系统中安装开发包的命令为sudo apt install -y libjsoncpp-dev二、Json::Value 通用值容器Json::Value是整个jsoncpp库的核心你可以把它理解为一个万能的 JSON 值容器。JSON 本身是动态类型系统一个值可以是对象键值对、数组、字符串、数字、布尔值、null 共 6 种类型。Json::Value对这所有类型做了统一封装 —— 一个Josn::Value对象就可以表示任意一种 JSON 数据。自动适配类型赋值字符串就自动变为字符串类型赋值整数就自动变为数字类型无需手动声明类型对象式访问通过root[键名]的方式读写键值对使用体验类似std::map数组式访问通过root[下标]的方式读写元素行为类似std::vector支持无限嵌套Value 内部可以继续存放 Value轻松实现多层级的 JSON 结构举个例子我们要构造一个包含 code、user 两个字段的 JSON 对象写法非常直观Json::Value root; // 创建一个空的JSON对象默认object类型对应{} root[code] mycode;// 添加字符串字段 root[user] hx; // 添加字符串字段三、Json::StyledWriter 格式化输出构造好内存中的 JSON 结构后我们需要把它转成真正的字符串这个过程就叫序列化。Json::StyledWriter就是jsoncpp提供的格式化序列化工具。它的特点是输出的 JSON 字符串自带换行、缩进和空格排版工整可读性极强非常适合调试打印、配置文件生成等人眼阅读的场景。 Json::StyledWriter writer; // 创建格式化写入器 std::string str writer.write(root); // 将Json::Value序列化为字符串 除了 StyledWriterjsoncpp 还提供了另外两种常用的序列化工具Json::FastWriter输出无空格、无换行的单行压缩 JSON体积更小适合网络传输Json::StreamWriter新版 jsoncpp 推荐的标准 API功能更灵活StyledWriter 属于旧版兼容接口四、代码示例#include iostream #include jsoncpp/json/json.h //JSON 对象的构造与格式化输出 int main() { // 1. 构造JSON对象 Json::Value root; root[code] mycode; root[user] hx; // 2. 格式化为带缩进的JSON字符串 Json::StyledWriter writer; std::string json_str writer.write(root); // 3. 打印输出 std::cout json_str std::endl; return 0; } //在 Linux 环境下使用 g 编译时必须加上 -ljsoncpp 链接参数 //g test.cpp -o test -ljsoncpp
阅读完成 · 觉得有帮助?