第三方库jsoncpp

news2025/1/4 19:03:18

文章目录

  • 0.jsoncpp库是做什么的?
  • 1.安装库
  • 2.有哪几个类,如何使用
    • Json::Value类
    • Json::Writer类-StreamWriter
    • Json::Reader类-CharReader
    • 三者关系
  • 3.使用样例
    • 将数据先存入Value类,再通过StreamWriter类转为Json格式的字符串
    • 获取到Json格式字符串,通过CharReader内容写入到Value类中,通Value类访问元素。


0.jsoncpp库是做什么的?

jsoncpp库用于实现json格式的序列化和反序列化,完成将多个数据对象组织成为json格式字符串,以及将json格式字符串解析到多个数据对象的功能。

1.安装库

2.有哪几个类,如何使用

Json::Value类

中间数据存储类

class Json::Value{ 
 Value &operator=(const Value &other); //Value重载了[]和=,因此所有的赋值和获取数据都可以通过
 Value& operator[](const std::string& key);//简单的方式完成 val["姓名"] = "小明"; 
 Value& operator[](const char* key); 
 Value removeMember(const char* key);//移除元素
 const Value& operator[](ArrayIndex index) const; //val["成绩"][0] 
 Value& append(const Value& value);//添加数组元素val["成绩"].append(88); 
 ArrayIndex size() const;//获取数组元素个数 val["成绩"].size(); 
 std::string asString() const;//转string string name = val["name"].asString(); 
 const char* asCString() const;//转char* char *name = val["name"].asCString(); 
 Int asInt() const;//转int int age = val["age"].asInt(); 
 float asFloat() const;//转float 
 bool asBool() const;//转 bool 
};

Json::Writer类-StreamWriter

用于对Json::Value中的数据进行序列化

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; 
}

只能通过SteamWriterBuilder对象的newStreamWriter去实例化StreamWritrt

Json::Reader类-CharReader

用于对json格式字符串反序列化,将数据对象存储到一个Json::Value对象中

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; 
}

ChareReader和StreamWriter一样需要通过其他对象来实例化。

三者关系

json格式字符串——(使用CharReader类进行反序列化)——》Json::Value类
Json::Value类——(使用StreamWriter类进行序列化)——》json格式的字符串

3.使用样例

将数据先存入Value类,再通过StreamWriter类转为Json格式的字符串

//json_test.cpp
#include<iostream>
#include<sstream>
#include<string>
#include<memory>
#include<jsoncpp/json/json.h>

int main()
{
  std::string name = "小明";
  int age = 19;
  float score[] = {77.5,88,99.5};
  Json::Value val;
  val["姓名"] =name;
  val["年龄"] = age;
  val["成绩"].append(score[0]);
  val["成绩"].append(score[1]);
  val["成绩"].append(score[2]);

  Json::StreamWriterBuilder swb;
  std::unique_ptr<Json::StreamWriter>writer(swb.newStreamWriter());
  writer->write(val,&std::cout);
  std::cout<<std::endl;

  return 0;
}

在这里插入图片描述

获取到Json格式字符串,通过CharReader内容写入到Value类中,通Value类访问元素。

//json_test2.cpp
#include<jsoncpp/json/json.h>
#include<iostream>
#include<string>
#include<memory>
using namespace std;
int main()
{ string str = R"({ "姓名" : "小明", "年龄" : 19, "成绩" : [ 77.5, 88, 99.5 ] })";
  Json::Value val;
  Json::CharReaderBuilder crb;
  unique_ptr<Json::CharReader> reader(crb.newCharReader());
  string err;
  reader->parse(str.c_str(),str.c_str()+str.size(),&val,&err);
  cout<<val["姓名"].asString()<<endl;
  cout<<val["年龄"].asInt()<<endl;
  int sz = val["成绩"].size();
  for(int i = 0;i<sz;i++)
  {
    cout<<val["成绩"][i].asFloat()<<endl;
  }
  for(auto it=val["成绩"].begin();it!=val["成绩"].end();it++)
  {
    cout<<it->asFloat()<<endl;
  }
  return 0;
}

在这里插入图片描述


我在linux上的makefile:

#makefile

.all:
all:json_test json_test2 

json_test2:json_test2.cpp 
	g++ -o $@ $^ -std=c++11 -ljsoncpp

json_test:json_test.cpp
	g++ -o $@ $^ -std=c++11 -ljsoncpp
.PHONY:clean
clean:
	rm -rf json_test

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

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

相关文章

6 postgresql事务与并发控制

事务与并发控制 事务可以理解为做一件事&#xff0c;数据库就是一件事要么做完&#xff0c;要么不做&#xff0c;不然这数据库给给人不可靠的感觉 正如解释事务具有四个重要特性&#xff1a;ACID&#xff08;原子性&#xff0c;一致性&#xff0c;隔离性&#xff0c;持久性&a…

python实现提取视频帧的图片

文章目录 1、需求痛点2、完整代码⭐3、代码分析3.1、需要改动的地方3.2、OpenCV库的使用3.3、多线程技术 4、执行效率5、效果展示⭐6、注意事项&#x1f53a;7、总结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注…

3 IIC总线

3 IIC总线 1、基本概念1.1 IIC总线定义1.2 IIC总线协议概念 2 以AT24C02为例说明时序2.1 基本特性2.2 利用GPIO模拟IIC2.3 对AT24C02的操作2.4 重定向printf 1、基本概念 1.1 IIC总线定义 定义&#xff1a;两线式串行总线 两线式&#xff1a;说明处理器和外设之间只需两根信号…

【时间复杂度和空间复杂度】(内含超多实例练习)

【时间复杂度和空间复杂度】&#xff08;内含超多实例练习&#xff09; 1. 算法效率2. 时间复杂度2.1 时间复杂度的概念2.2 实例练习2.2.1 数组中搜索数据2.2.2 冒泡排序2.2.3 二分查找2.2.4 阶乘递归2.2.5 斐波那契递归 3. 空间复杂度3.1 空间复杂度的概念3.2 实例练习3.2.1 冒…

Set Hashset底层原理 LinkedSet底层原理 Treeset 31

不重复只执行一次&#xff0c;排序是小到大&#xff0c;色图是接口类 Hashset底层原理 LinkedSet底层原理 Treeset 总结

AI+云边端协同,EasyCVR视频汇聚技术赋能安防监控新生态

随着信息技术的飞速发展和数字化时代的到来&#xff0c;安防监控领域的技术也在不断创新和突破。EasyCVR平台的视频汇聚技术作为其中的佼佼者&#xff0c;以其强大的视频处理、汇聚与融合能力&#xff0c;在安防监控领域展现出了巨大的应用潜力和价值。本文将详细介绍EasyCVR视…

权限束缚术:windows工具自动化权限提升

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理利用工具全自动化提权的相关操作方法 因为我没有相关的环境复现&#xff0c;所以没有成功 不过复现的操作就是下面整理的操作 溢出漏洞提权原理 利用溢出漏洞提权&#xff0c;实际上就是一次判断过往的…

极简聊天室-websocket版

再写一个极简聊天室的websocket版&#xff0c;在本例中&#xff0c;websocket仅用于服务器向客户端传输信息&#xff0c;客户端向服务器发送信息是传统的http post方式&#xff0c;用axios来实现的&#xff0c;当然websocket本身是支持双向通信&#xff0c;主要是为了方便跟前面…

Selenium 无法定位元素的几种解决方案

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位&#xff0c;对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法&#xff1a; d…

LLM大模型实战项目--基于ChatGLM2的小书虫文档阅读助手

本文介绍如此从零开始编写一个基于ChatGLM2的文档阅读助手 一、项目介绍 二、获取API接口 三、环境配置 四、代码实现 五、效果展示 一、项目介绍 小书虫&#x1f4da; 文档阅读助手是一个基于百度千帆大模型平台的Web应用程序&#xff0c;核心是清华大学训练的ChatGLM2大模…

算法加项目

1.仅加号 很简单&#xff0c;找到每次添加后最小的即可&#xff0c;这里不做演示。 2.采药 dp&#xff0c;for1数目&#xff0c;for2时间&#xff0c;简单的dp模板题目。 #include<bits/stdc.h> using namespace std; int n,m; const int N105,M105; long long a[M],b[M…

TInyWebServer面试题

一、项目介绍 &#xff08;1&#xff09;为什么要做这样一个项目&#xff1f; &#xff08;2&#xff09;介绍一下你的项目 这个项⽬是我在学习计算机⽹络和Linux socket编程过程中独⽴开发的轻量级Web服务器&#xff0c;服务器的⽹络模型是主从reactor加线程池的模式&#xf…

VMware虚拟机网络模式配置详解【原理,功能,特点层面】

VMware虚拟机网络模式配置详解【原理,功能,特点层面】 文章目录 VMware虚拟机网络模式配置详解【原理,功能,特点层面】桥接模式&#xff08;Bridged&#xff09;原理功能点介绍虚拟网络编辑器配置虚拟机配置 配置教程编辑-虚拟网络编辑器虚拟机网络配置 特点 NAT模式概念功能点…

数学建模--智能算法之蚁群优化算法

目录 基本原理 算法步骤 Python代码示例 应用领域 特点及改进 蚁群优化算法在解决哪些具体组合优化问题方面表现最为突出&#xff1f; 如何有效地改进蚁群优化算法以提高其收敛速度和避免陷入局部最优的问题&#xff1f; 蚁群优化算法与其他群体智能优化算法&#xff0…

三维旋转矩阵

前言 本文讲述三维旋转的矩阵推导&#xff0c;推导过程遵循下面的规则&#xff1a; 本文的坐标系是基于右手坐标系的逆时针旋转为正向旋转 围绕坐标轴的旋转 x x x轴 我们假设旋转的点为 P P P 假设旋转之前点 P P P的坐标为 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0​,y0​,…

CAN总线中注入拓展帧、远程帧,CAPL通用函数。

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 【测试需求】:CAN总线要求DUT 接收到非预期的扩展帧、远程帧时,通信正常,…

vulhub:nginx解析漏洞nginx_parsing

这个解析漏洞其实是PHP CGI的漏洞&#xff0c;在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的&#xff0c;当URL中有不存在的文件&#xff0c;PHP就会向前递归解析。在一个文件/xx.jpg后面加上/.php会将 /xx.jpg/xx.php 解析为 php 文件 条件&#xff1a; Ngi…

釉面陶瓷器皿和玻璃器皿 SOR/2016-175认证

釉面陶瓷制品和釉面玻璃制品设计用于盛装食品&#xff0c;包括扁平餐具、杯子或马克杯、小号或大号凹形器皿&#xff08;杯子或马克杯除外&#xff09;以及水罐。这些法规适用于以下釉面陶瓷制品和釉面玻璃制品&#xff1a; 完全或部分由陶瓷或玻璃制成完全或部分覆盖含铅或镉…

MATLAB(12)预测模型

一、前言 在MATLAB中创建一个预测模型通常涉及多个步骤&#xff0c;包括数据准备、模型选择、训练模型、评估模型以及使用模型进行预测。以下是一个简化的例子&#xff0c;说明如何使用MATLAB中的内置函数来创建一个基于线性回归的预测模型。这个例子将使用MATLAB的fitlm函数来…

C语言函数初识

文章目录 &#x1f34a;自我介绍&#x1f34a;函数初识前言概念具体实例解释函数的实用性 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&#xff0c;我是小珑也…