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.hqwc.cn/news/674560.html

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

相关文章

外包干了16天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

【探索Java编程:从入门到入狱】Day4

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

如何从零开始学习数据结构?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「数据结构的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;数据结构 算法&#xff1d;程…

[Maven]IDEA报错-xxx is referencing itself

在IDEA中&#xff0c;执行 mvn clean时报错xxx is referencing itself。 解决方案&#xff1a;https://stackoverflow.com/questions/64246267/maven-error-using-intellij-is-referencing-itself 具体做法&#xff1a;采用上图第二条&#xff0c;将父模块pom文件中的对子模块…

基于FPGA的AD7705芯片驱动设计VHDL代码Quartus仿真

名称&#xff1a; 软件&#xff1a;Quartus基于FPGA的AD7705芯片驱动设计VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 语言&#xff1a;VHDL 代码功能&#xff1a; AD77025芯片控制及串口输出 1、使用FPGA控制AD77025芯片&#xff0c;使其输出AD值 2、将数据计…

【busybox记录】【shell指令】sort

目录 内容来源&#xff1a; 【GUN】【sort】指令介绍 【busybox】【sort】指令介绍 【linux】【sort】指令介绍 使用示例&#xff1a; 排序 - 默认排序 排序 - 检查所给文件是否已经排序 排序 - 输出已经排序过的文件&#xff0c;不会重新排序 排序 - 忽略每行前面的空…

Kubernetes 教程:在 Containerd 容器中使用 GPU

原文链接:Kubernetes 教程:在 Containerd 容器中使用 GPU 云原生实验室本文介绍了如何在使用 Containerd 作为运行时的 Kubernetes 集群中使用 GPU 资源。https://fuckcloudnative.io/posts/add-nvidia-gpu-support-to-k8s-with-containerd/ 前两天闹得沸沸扬扬的事件不知道…

为什么现在散户在加密市场赚不到钱了?

为什么总有人说这个周期已经结束了&#xff1f;为什么每个人都感到痛苦&#xff1f;我们可以将所有问题归结为&#xff1a;在当前的市场结构下&#xff0c;散户再也赚不到真正的钱了。 关于回归本源、摆脱当前周期的一些杂谈 为什么本轮行情中没有散户的身影&#xff0c;答案…

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…

2024上半年软考新规,对高级论文科目不太友好

辽宁省发布了《关于2024年上半年计算机技术与软件专业技术资格(水平)考试批次安排的通知》&#xff0c;通知原文如下&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 1.…

QT-TCP通信

网上的资料太过于书面化&#xff0c;所以看起来有的让人云里雾里&#xff0c;看不懂C-tcpsockt和S-tcpsocket的关系 所以我稍微画了一下草图帮助大家理解两个套接字之间的关系。字迹有的飘逸勉强看看 下面是代码 服务端&#xff1a; MainWindow::MainWindow(QWidget *parent) …

(MATLAB)安装指南

参考链接&#xff1a;MATLAB2019a安装教程&#xff08;避坑版&#xff09;