[C++][第三方库][jsoncpp]详细讲解
目录
- 1.介绍
- 2.jsoncpp
- 3.使用
- 1.main.cc
- 2.序列化
- 3.反序列化
1.介绍
json是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据json数据类型:对象、数组、字符串、数字- 对象:使用
{}括起来的表示一个对象 - 数组:使用
[]括起来的表示一个数组 - 字符串:使用
""括起来的表示一个字符串 - 数字:包括整形和浮点型,直接使用
- 对象:使用
2.jsoncpp
jsoncpp库用于实现json格式的序列化和反序列化,完成将多个数据对象组织成为格式字符串解析得到多个数据对象的功能- 主要借助三个类以及其对应的少量成员函数完成:
// Json数据对象类 -> 用于进行中间数据存储 class Json::Value {// Value重载了[]和=,因此所有的赋值和获取数据都可以通过[]实现Value &operator=(const Value &other);// 简单的方式完成 val["姓名"] = "SnowK";Value& operator[](const std::string& key);Value& operator[](const char* key);// 移除元素Value removeMember(const char* key);// val["成绩"][0]const Value& operator[](ArrayIndex index) const; // 添加数组元素val["成绩"].append(88); Value& append(const Value& value);// 获取数组元素个数 val["成绩"].size();ArrayIndex size() const;// 转string string name = val["name"].asString();std::string asString() const;// 转char* char *name = val["name"].asCString();const char* asCString() const;// 转int int age = val["age"].asInt();int asInt() const; // 转floatfloat asFloat() const;// 转 boolbool asBool() const; };//json序列化类,低版本用这个更简单 class JSON_API Writer {virtual std::string write(const Value& root) = 0; }class JSON_API FastWriter : public Writer {virtual std::string write(const Value& root); }class JSON_API StyledWriter : public Writer {virtual std::string write(const Value& root); }//json 序列化类,高版本推荐,如果用低版本的接口可能会有警告 class JSON_API StreamWriter {virtual int write(Value const& root, std::ostream* sout) = 0; }class JSON_API StreamWriterBuilder : public StreamWriter::Factory {virtual StreamWriter* newStreamWriter() const; }// json反序列化类,低版本用起来更简单 class JSON_API Reader {bool parse(const std::string& document, Value& root, bool collectComments = true); }// json反序列化类,高版本更推荐 class JSON_API CharReader {virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, std::string* errs) = 0; }class JSON_API CharReaderBuilder : public CharReader::Factory {virtual CharReader* newCharReader() const; }
3.使用
1.main.cc
int main()
{char name[] = "SnowK";int age = 18;float score[3] = {100, 99, 98};Json::Value stu;stu["Name"] = name;stu["Age"] = age;stu["Score"].append(score[0]);stu["Score"].append(score[1]);stu["Score"].append(score[2]);std::string str;if(Serialize(stu, str) == false){return -1;}std::cout << str << std::endl;std::cout << "-------------------------------" << std::endl;Json::Value val;if(UnSerialize(str, val) == false){return -1;}std::cout << val["Name"].asString() << std::endl;std::cout << val["Age"].asInt() << std::endl;for (int i = 0; i < val["Score"].size(); i++){std::cout << val["Score"][i].asInt() << std::endl;}return 0;
}
2.序列化
bool Serialize(const Json::Value &val, std::string &dest)
{// 由Json::StreamWriterBuilder生产出Json::StreamWriterJson::StreamWriterBuilder swb;std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());// 通过Json::StreamWrite的write()进行序列化std::stringstream ss;if (sw->write(val, &ss) != 0){std::cout << "Json序列化失败" << std::endl;return false;}dest = ss.str();return true;
}
3.反序列化
bool UnSerialize(const std::string &src, Json::Value &val)
{Json::CharReaderBuilder crb;std::unique_ptr<Json::CharReader> cr(crb.newCharReader());std::string err;if (cr->parse(src.c_str(), src.c_str() + src.size(), &val, &err) == false){std::cout << "json反序列化失败: " << err << std::endl;return false;}return true;
}
相关文章:
[C++][第三方库][jsoncpp]详细讲解
目录 1.介绍2.jsoncpp3.使用1.main.cc2.序列化3.反序列化 1.介绍 json是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据json数据类型:对象、数组、字符串、数字 对象:使用{}括起来的表示一个对象数组:使用[…...
JavaScript中decodeURIComponent函数的深入解析与应用指南
在Web开发中,经常需要对URI(统一资源标识符)进行编码和解码,以保证数据传输的准确性和可靠性。decodeURIComponent函数是JavaScript中用于解码由encodeURIComponent函数或其他类似方法编码的部分统一资源标识符(URI&am…...
DMA方式为什么无需保护现场
DMA(Direct Memory Access)方式无需保护现场的原因主要与其工作原理和硬件设计有关。以下是对这一问题的详细解释: DMA工作原理 DMA是一种通过硬件直接在内存和外设之间传输数据的技术,无需CPU的介入。在DMA传输过程中ÿ…...
区块链可投会议CCF C--FC 2025 截止10.8 附录用率
Conference:Financial Cryptography and Data Security (FC) CCF level:CCF C Categories:network and information security Year:2025 Conference time:14–18 April 2025, Miyakojima, Japan 录用率࿱…...
springboot系列--web相关知识探索四
一、前言 web相关知识探索三中研究了请求中所带的参数是如何映射到接口参数中的,也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索三中主要研究了注解方式以及Servlet API方式。本次…...
在PyQt5中,清空一个QFrame中的所有控件
在PyQt5中,如果你想要清空一个QFrame中的所有控件,你需要遍历该QFrame的布局(假设你已经在其中添加了一个布局,比如QVBoxLayout或QHBoxLayout),并从布局中移除所有的控件。由于直接从布局中移除控件并不会立…...
SpringBoot实现:校园资料分享平台开发指南
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
Redis篇(缓存机制 - 基本介绍)(持续更新迭代)
目录 一、缓存介绍 二、经典三缓存问题 1. 缓存穿透 1.1. 简介 1.2. 解决方案 1.3. 总结 2. 缓存雪崩 2.1. 简介 2.2. 解决方案 2.3. 总结 3. 缓存击穿 3.1. 简介 3.2. 解决方案 3.3. 总结 4. 经典三缓存问题出现的根本原因 三、常见双缓存方案 1. 缓存预热 1…...
引领5G驱动的全球数字营销革新:章鱼移动广告全球平台的崛起
引领5G驱动的全球数字营销革新:章鱼移动广告全球平台的崛起 作为章鱼移动广告平台的营销战略顾问,黄珍珍通过她在市场营销、品牌推广、技术整合等多方面的丰富经验,成功推动了这一平台在全球广告市场的崛起。她不仅为平台的国际化扩展奠定了基…...
思维链ChatGPT
建立客户端 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" )示例1 response client.chat.completions.create(model"gpt-3.5-turbo",messages[{"role": "user","content": &quo…...
idea中的Java版本运行错误
1.java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field com.sun.tools.javac.tree.JCTree qualid 这个错误通常是由于升级到Java 21后,Lombok等库无法正确访问内部的Java编译器API导致的。具体原因如下: Lombok在…...
用HTML5+CSS+JavaScript庆祝国庆
用HTML5CSSJavaScript庆祝国庆 中华人民共和国的国庆日是每年的10月1日。 1949年10月1日,中华人民共和国中央人民政府成立,在首都北京天安门广场举行了开国大典,中央人民政府主席毛泽东庄严宣告中华人民共和国成立,并亲手升起了…...
《OpenCV 计算机视觉》—— 视频背景建模
文章目录 一、背景建模的目的二、背景建模的方法三、背景建模的步骤四、注意事项五、代码实现 一、背景建模的目的 视频背景建模的主要目的是从视频序列中提取出静态背景,以便将动态的前景对象与静态的背景进行分离。这有助于进一步分析和处理视频内容,…...
【Mac】和【安卓手机】 通过有线方式实现投屏
Mac 和 安卓手机 实现投屏(有线) 1.下载HomeBrew /bin/bash -c "$(curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install/master/install.sh)"2.安装Scrcpy brew install scrcpy3.安装adb brew install android-platfor…...
GitHub flow工作流
github.com github.com使用自己版本的标记语法,它提供了一组额外的有用的 特性,其中许多特性使处理github.com上的内容更加容易。 用户名-提及 键入一个符号,后跟一个用户名,将通知此人前来查看评论。 这叫做“提及”&#x…...
【Qt笔记】QFrame控件详解
目录 引言 一、QFrame的基本特性 二、QFrame的常用方法 2.1 边框形状(Frame Shape) 2.2 阴影样式(Frame Shadow) 2.3 线条宽度(Line Width) 2.4 样式表(styleSheet) 三、QFrame的应用场景 四、应用…...
【二十八】【QT开发应用】模拟WPS Tab
WidgetBase 类旨在实现窗口的可调整大小功能,使用户能够手动改变窗口的尺寸。该类通过以下机制实现窗口缩放效果:当鼠标移动至窗口边缘时,鼠标指针样式会动态改变以指示可调整大小的方向。用户在边缘区域按下鼠标左键后,可以通过拖…...
PyQt入门指南四 事件处理机制详解
1. 事件处理概述 在PyQt中,事件处理是实现交互性的关键部分。事件可以是用户的操作(如点击按钮、键盘输入),也可以是系统的通知(如窗口最小化、定时器超时)。PyQt使用信号(Signals)…...
【24最新亲试】ubuntu下载go最新版本
系列综述: 💞目的:本系列是个人整理为了工具配置的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于Ubuntu 升级 golang 版本完美步骤进行的,每个知识点的修…...
InnoDB 事务模型
文章目录 InnoDB 事务模型事务ACID特性事务隔离级别 事务操作事务并发问题事务数据读写类型Consistent Nonlocking Reads 快照读Locking Reads 加锁读 MVCC 并发控制实现原理InnoDB 隐藏列Read ViewUndo log实现过程 MVCC与隔离级别MVCC和辅助索引 幻读可重复读MVCC会出现幻读的…...
std::accumulate算法深度解析:从求和到通用折叠,解锁STL隐藏的瑞士军刀
1. 重新认识std::accumulate:不只是求和工具 第一次接触std::accumulate时,大多数人都是从求和开始的。确实,这个算法默认行为就是对范围内的元素进行累加。但如果你只把它当作一个高级计算器,那就太小看这个STL中的"瑞士军刀…...
Python(while循环)
目录 1.while 循环的基本概念 1.1 语法格式 1.2 最简单的示例 1.3 while 与 for 的对比 2. 代码执行顺序详解 3. 无限循环及其控制 3.1 无限循环的基本写法 3.2 避免无限循环的常见错误 4. break、continue 与 else 4.1 break:提前终止整个循环 4.2 cont…...
C AI 编程助手:助力开发者高效编程
C AI 编程助手:助力开发者高效编程 引言 随着人工智能技术的飞速发展,编程领域也迎来了新的变革。C AI 编程助手作为一种新兴的智能编程工具,旨在帮助开发者提高编程效率,降低开发成本。本文将详细介绍C AI 编程助手的功能、优势以及应用场景,帮助开发者更好地了解这一创…...
版本控制系统核心功能解析:从历史追踪到团队协作的四大基石
1. 项目概述:从ICO到VCS,一次版本控制的深度对话在软件开发的日常里,我们经常听到“版本控制”这个词,它就像是程序员们的时光机和后悔药。但具体到工具上,Git、SVN、Mercurial……选择很多,而“VCS ICO”这…...
MHMarkets迈汇:油价回落地缘风险有所缓和
MHMarkets迈汇:油价回落地缘风险有所缓和近期国际原油市场出现明显回吐,布伦特与WTI两大基准油价从前期高位双双滑落,地缘风险溢价随谈判预期升温而部分释放。市场围绕中东局势变化展开高频博弈,多空情绪快速切换。在这一背景下&a…...
OpenWrt自动化神器:用luci-app-nettask插件,把物理按键和断网都变成触发器
OpenWrt自动化神器:用luci-app-nettask插件解锁硬件触发潜能 你是否曾想过,家里那台默默工作的路由器,除了提供Wi-Fi信号外,还能成为智能家居的中枢神经?当网络突然中断时,它能自动重连并发送通知ÿ…...
wpa_ctrl接口简介和使用总结
参考: wpa_supplicant简介与基础使用总结-CSDN博客 wpa_cli核心操作总结-CSDN博客 认识wpa_ctrl接口 在嵌入式Linux的C语言开发中,与 wpa_supplicant 交互的标准方法就是使用它官方提供的 wpa_ctrl 接口。这个接口以一组简单的C函数形式提供,…...
Ahk2Exe:3步实现AutoHotkey脚本到EXE的专业编译方案
Ahk2Exe:3步实现AutoHotkey脚本到EXE的专业编译方案 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe Ahk2Exe是AutoHotkey官方推出的脚本编译器&#x…...
基于AM62x异构多核与RPMsg的工业HMI实时控制系统设计
1. 项目概述:为什么是AM62x?最近在做一个工业HMI(人机界面)的升级项目,客户对成本、功耗和实时性提出了近乎苛刻的要求。传统的方案要么性能过剩、成本高昂,要么实时性跟不上,要么功耗是个大问题…...
【语音检测】基于matlab GUI短时自相关的基音周期检测【含Matlab源码 15451期】
💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞Ὁ…...
