【开源项目】Jsoncpp的简单使用

Jsoncpp是一个开源项目,它是一个用于处理JSON(JavaScript Object Notation)数据的C++库。它支持将C++结构化的数据转化为JSON字符串,也支持将JSON字符串转化为结构化数据

JSON(JavaScript Object Notation)数据格式是一种轻量级的数据交换格式,它基于ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简单说,JSON 是一种数据格式,不是一种编程语言,虽然它具有相同的语法形式,但它并不遵循 JavaScript 的语法规则。

下面是在Ubuntu中安装Jsoncpp库的指令:

Ubuntu:
sudo apt install -y libjsoncpp-dev

Centos:
sudo yum install -y jsoncpp-devel

安装完成之后我们就可以在如下的目录中查询到头文件

下面我们就来简单使用一下这个库:下面的就是简单的样例代码,我们只需要照猫画虎的套模板够用即可

#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>

struct stu
{
    std::string name;
    int age;
    double weight;
};
int main()
{
    struct stu xm={"小明",18,75};//结构化数据
    Json::Value root;//定义存放数据对象
    root["name"]=xm.name;//向对象中写入
    root["age"]=xm.name;
    root["weight"]=xm.weight;

    Json::FastWriter writer;//定义输出格式对象
    std::string str=writer.write(root);//write函数输出json格式字符串
    std::cout<<str;
    return 0;
}

上面就是一个最简单的演示,其中编译的时候要链接动态库(即加编译选项-ljsoncpp),最终结果是这样的:

当然除了上面的格式,我们在定义输出格式对象的时候还可以定义下面的类的对象,这样字符串的格式就会发生变化

并且对象中可以放自己

并且我们可以发现,打印格式是按名称首字母排序后打印的(a,n,s,w),而不是我代码中的赋值顺序(n,a,w,s)

下面就是给我们json格式的字符串,我们如何转化为结构化的数据,我们无法得到json格式的字符串可以用上面的代码把生成的字符串写入到文件中

struct stu
{
    void print()
    {
        std::cout << "Debug:\nname: " << name << "age: " << age << "weight: " << weight << std::endl;
    }
    std::string name;
    int age;
    double weight;
};

int main()
{
    std::ifstream in("out.txt");
    if (!in.is_open())
        return 1;
    char buffer[1024];
    in.read(buffer, sizeof(buffer));
    in.close();

    std::string json_str = buffer; // 把文件中的字符串读到json_str中
    Json::Value root;              // 定义存放数据对象
    Json::Reader reader;           // 定义解析对象
    int res=reader.parse(json_str, root);  // 把json_str解析到root对象中
    (void)res;
    struct stu xm;
    xm.name = root["name"].asString(); // 从root对象中提取
    xm.age = root["age"].asInt();
    xm.weight = root["weight"].asDouble();

    xm.print();

    return 0;
}

基本的过程就是像上面这样

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot的大学生体质测试管理系统(含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的大学生体质测试管理系统1拥有三种角色 管理员&#xff1a;学生管理、教师管理、日常运行管理、运动分析管理、成绩管理、论坛管理、轮播图管理等 教师&#xff1a;登录…

C++AVL树详解

什么是AVL树 AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的⼆叉搜索树&#xff1a;它的 左右⼦树都是AV树&#xff0c;且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树&#xff0c; 通过控制⾼度差去控制平衡…

算法-依据先序遍历和中序遍历构建二叉树

简单的二叉树遍历算法&#xff0c; 为了通过给定的先序遍历&#xff08;preorder&#xff09;和中序遍历&#xff08;inorder&#xff09;数组构造二叉树&#xff0c;我们需要理解这两种遍历方式的特点&#xff1a; 先序遍历&#xff08;Preorder&#xff09;&#xff1a;首先…

网站集群批量管理-Ansible(playbook)

1.剧本概述 1. playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 2. 剧本yaml格式,yaml格式的文件:空格,冒号 2. 区别 ans-playbookans ad-hoc共同点批量管理,使用模块批量管理,使用模块区别重复调用不是很方便,不容易重复场景部署服务…

网关在不同行业自动化生产线的应用

网关在不同行业自动化生产线的应用&#xff0c;展示了其作为信息与物理世界交汇点的广泛影响力&#xff0c;尤其在推动行业智能化、自动化方面发挥了不可估量的作用。以下是网关技术在污水处理、智慧农业、智慧工厂、电力改造及自动化控制等领域的深入应用剖析。 1. 污水处理 …

java方法对象案例

完成电影信息展示功能&#xff1b;根据电影id查询该电影的详细 主方法&#xff1a; package Y; import java.util.Scanner; public class 模仿电影系统main { //目标&#xff1a;完成电影信息展示功能&#xff1b;根据电影id查询该电影的详细 //电影数据// 1,"水门桥&q…

超级智能“试衣镜”!GarDiff:高保真保持目标人物特征和服装细节,虚拟试穿技术新SOTA!

今天给大家介绍一个最新的虚拟试穿技术GarDiff&#xff0c;它可以分析你想穿的衣服和你的照片并提取出衣服的颜色、纹理和形状等细节。然后通过一个特殊的“对比器”来确保衣服与您的身体形状完美契合。这个对比器会使用两种不同的“眼睛”&#xff1a;一种是可以看到整体外观的…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

【华为HCIP实战课程七】OSPF邻居关系排错MTU问题,网络工程师

一、MTU MUT默认1500,最大传输单元,一致性检测 [R3-GigabitEthernet0/0/1]mtu 1503//更改R3的MTU为1503 查看R3和SW1之间的OSPF邻居关系正常: 默认华为设备没有开启MTU一致性检测! [R3-GigabitEthernet0/0/1]ospf mtu-enable //手动开启MTU检测 [SW1-Vlanif30]ospf mtu…

centos7 yum仓库无法使用的问题

1、问题 如下 2、按照csdn等网页说的做了没有用&#xff01;CentOS-yum源不可用报错&#xff1a;Could not retrieve mirrorlist 问题解决_yum could not retrieve mirrorlist-CSDN博客 3、使用b站博主的方法解决&#xff01; LinuxMirrors: GNU/Linux 一键更换系统软件源脚本…

Ambari搭建Hadoop集群 — — 问题总结

Ambari搭建Hadoop集群 — — 问题总结 一、部署教程&#xff1a; 参考链接&#xff1a;基于Ambari搭建大数据分析平台-CSDN博客 二、问题总结&#xff1a; 1. VMwear Workstation 查看网关 2. 资源分配 参考&#xff1a; 硬盘&#xff1a;master&#xff08;29 GB&#xff…

基于组合模型的公交交通客流预测研究

摘 要 本研究致力于解决公交客流预测问题&#xff0c;旨在通过融合多种机器学习模型的强大能力&#xff0c;提升预测准确性&#xff0c;为城市公交系统的优化运营和交通管理提供科学依据。研究首先回顾了公交客流预测领域的相关文献&#xff0c;分析了传统统计方法在处理大规…

去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)-Python案例

1、去噪概率模型&#xff08;Denoising Probabilistic Models&#xff09; 去噪概率模型&#xff08;Denoising Probabilistic Models&#xff09;是一类通过学习数据的潜在分布来去除噪声的生成模型。其核心思想是&#xff0c;在有噪声的数据中&#xff0c;模型通过条件概率学…

pytest框架之fixture测试夹具详解

前言 大家下午好呀&#xff0c;今天呢来和大家唠唠pytest中的fixtures夹具的详解&#xff0c;废话就不多说了咱们直接进入主题哈。 一、fixture的优势 ​ pytest框架的fixture测试夹具就相当于unittest框架的setup、teardown&#xff0c;但相对之下它的功能更加强大和灵活。 …

基于SSM医疗信息管理系统(源码+定制+参考)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Python数字图像处理实战——基于OpenCV实现多种滤波器(附完整代码和结果图)

Python数字图像处理实战——基于OpenCV实现多种滤波器&#xff08;附完整代码和结果图&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测…

分辨率提高4到8倍!AI高清修复工具-upscayl使用方法!

你还在为手中的模糊照片苦恼吗&#xff1f; 是不是想把老照片或低分辨率的图片用于大尺寸印刷&#xff0c;却因为画质糟糕而无从下手&#xff1f; 现在你不再需要高深的Photoshop技能&#xff0c;也不用花费巨资找人修图。借助AI高清修复工具Upscayl&#xff0c;只需几秒钟&am…

Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测

全文链接&#xff1a;https://tecdat.cn/?p37839 原文出处&#xff1a;拓端数据部落公众号 分析师&#xff1a; Kefan Yu 在大众旅游蓬勃发展的背景下&#xff0c;乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前&#xff0c;乡村旅游接待设施主要以招待所、…

基于Python的抑郁症患者看护系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

如何实现Vue2项目升级Vue3?

Vue3正式版已经发布有两年多了&#xff0c;如今它也已成为Vue的默认开发版本&#xff0c;如果你想要对之前Vue2项目进行升级重构&#xff0c;可以从以下几个维度入手&#xff1a; ① 构建工具 ② 入口文件 ③ 插件 ④ 指令 ⑤ 路由 ⑥ 状态管理 ⑦ 其他 一、构建工具 Vue3推荐使…