Jsoncpp介绍

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");//解析到rootread.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介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/8486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

头歌C语言课程实验(递归函数、嵌套函数)

第1关&#xff1a;递归求阶乘数列 任务描述 题目描述&#xff1a;用递归求Sn1!2!3!4!5!…n!之值&#xff0c;其中n是一个数字。 相关知识&#xff08;略&#xff09; 编程要求 请仔细阅读右侧代码&#xff0c;结合相关知识&#xff0c;在Begin-End区域内进行代码补充。 输…

Spring Framework事件机制

Spring Boot自身并不直接提供一个内置的发布/订阅&#xff08;Pub/Sub&#xff09;消息模型实现&#xff0c;但是它通过集成Spring Framework的核心功能以及与外部消息中间件&#xff08;如RabbitMQ、Kafka&#xff09;的整合&#xff0c;间接支持了发布/订阅模式。Spring Fram…

AI Agent智能应用从0到1定制开发(wanjie)

AI Agent&#xff08;人工智能体&#xff09;是一种能够感知环境、进行决策和执行动作的智能实体。不同于传统的人工智能&#xff0c;AI Agent 具备通过独立思考、调用工具去逐步完成给定目标的能力。 「完结12章」AI Agent智能应用从0到1定制开发 AI Agent 和大模型的区别在…

前端每日基础day1

闭包&#xff08;Closure&#xff09;是指在函数内部创建的函数&#xff0c;它可以访问其外部函数作用域中声明的变量和参数&#xff0c;即使外部函数已经执行完毕&#xff0c;这些变量仍然可以被内部函数访问和操作。换句话说&#xff0c;闭包可以“记住”并访问其词法作用域&…

【管理咨询宝藏95】SRM采购平台建设内部培训方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏95】SRM采购平台建设内部培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 重点是建设一个适应战略采…

PDF转word转ppt软件

下载地址&#xff1a;PDF转word转ppt软件.zip 平时工作生活经常要用到PDF转word转ppt软件&#xff0c;电脑自带的又要开会员啥的很麻烦&#xff0c;现在分享这款软件直接激活就可以免费使用了&#xff0c;超级好用&#xff0c;喜欢的可以下载

C++类和对象(基础篇)

前言&#xff1a; 其实任何东西&#xff0c;只要你想学&#xff0c;没人能挡得住你&#xff0c;而且其实学的也很快。那么本篇开始学习类和对象&#xff08;C的&#xff0c;由于作者有Java基础&#xff0c;可能有些东西过得很快&#xff09;。 struct在C中的含义&#xff1a; …

PyTorch模型的保存加载

一、引言 我们今天来看一下模型的保存与加载~ 我们平时在神经网络的训练时间可能会很长&#xff0c;为了在每次使用模型时避免高代价的重复训练&#xff0c;我们就需要将模型序列化到磁盘中&#xff0c;使用的时候反序列化到内存中。 PyTorch提供了两种主要的方法来保存和加…

值模板参数Value Template Parameters

模板通常使用类型作为参数&#xff0c;但它们也可以使用值。使用类型和可选名称声明一个值模板参数&#xff0c;方式与声明函数参数类似。值模板参数仅限于可以指定编译时常量的类型是bool、char、int等&#xff0c;但不允许使用浮点类型、字符串字面值和类。 #include <io…

控制反转(IOC)和依赖注入(DI)

什么是IOC&#xff08;控制反转&#xff09;&#xff1f; IoC 的思想就是将原本在程序中手动创建对象的控制权&#xff0c;交由 Spring 框架来管理。 控制&#xff1a;指的是对象创建&#xff08;实例化、管理&#xff09;的权力 反转&#xff1a;控制权交给外部环境&#xf…

缓存雪崩、击穿、击穿

缓存雪崩&#xff1a; 就是大量数据在同一时间过期或者redis宕机时&#xff0c;这时候有大量的用户请求无法在redis中进行处理&#xff0c;而去直接访问数据库&#xff0c;从而导致数据库压力剧增&#xff0c;甚至有可能导致数据库宕机&#xff0c;从而引发的一些列连锁反应&a…

MATLAB 基于规则格网的点云抽稀方法(自定义实现)(65)

MATLAB 基于规则格网的点云抽稀方法(自定义实现)(65) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 海量点云的处理,需要提前进行抽稀预处理,相比MATLAB预先给出的抽稀方法,这里提供一种基于规则格网的自定义抽稀方法,步骤清晰,便于理解抽稀内涵, 主要涉及到使…

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq&#xff0c;并且项目已经引入rabbitmq&#xff0c;完成了配置。 不同模式所需参数不同&#xff0c;生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

DCL 的学习

-- 创建用户 itcast , 只能够在当前主机localhost访问, 密码123456; create user itcastlocalhost identified by 123456; -- 创建用户 heima , 可以在任意主机访问该数据库, 密码123456 ; create user heima% identified by 123456; -- 修改用户 heima 的访问密码为 1234 ; a…

赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十五)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 100道 Java 基础面试题&#xff08;三十四&#xff09;-CSDN博客 六十九、spring mvc和struts的区别是什么&#xff1f; Spring MVC和Struts都是Java EE&#xff08;Java Enterprise Edition&#xff09;中流行的MV…

三层交换机与防火墙连通上网实验

防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量。它可以帮助防止未经授权的访问&#xff0c;保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量&#xff0c;例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

20240508日记

今天工作内容&#xff1a; 1.二号机S3点位焊接测试&#xff0c;调整位置精度。 2.一号机送针位置调整 3.自定义焊接功能测试 4.EAP服务启动测试 明日计划&#xff1a; 1.EAP流程修改功能开发 1.1 Read Barcode Complete 事件&#xff0c;上传料盘码和设备ID&#xff0c;等EA…

SlowFast报错:ValueError: too many values to unpack (expected 4)

SlowFast报错&#xff1a;ValueError: too many values to unpack (expected 4) 报错细节 File "/home/user/yuanjinmin/SlowFast/tools/visualization.py", line 81, in run_visualizationfor inputs, labels, _, meta in tqdm.tqdm(vis_loader): ValueError: too …

牛客题-链表内区间反转

链表内区间反转 这是代码 typedef struct ListNode listnode; struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {if (head NULL) {return NULL;}listnode* findhead head;listnode* findtail head;listnode* prev NULL;int count1 m;int count2…

nginx的rewrite重定向

rewrite地址重定向&#xff0c;实现URL重定向的重要指令&#xff0c;它根据regex&#xff08;正则表达式&#xff09;来匹配内容跳转 语法&#xff1a;rewrite regex replacement[flag] rewrite ^/(.*) https://www.baidu.com/$1 permanent; # 这是一个正则表达式&#xff0c;匹…