04_c/c++开源库 json解析jsoncpp库

1.说明与安装

说明:

c++ json字符解析

安装:

sudo apt-get install libjsoncpp-dev

编译依赖

pkg-config --cflags --libs jsoncpp

-I/usr/include/jsoncpp -ljsoncpp

编译选项: -I/usr/include/jsoncpp
连接选项: -ljsoncpp


2.实例

1.代码

1_jsonCpp_解析字符串_增.删.改.查.保存.cc

#include <iostream>
#include <fstream>
#include <memory>
#include <json/json.h>// 假设我们有一个JSON字符串或文件内容
std::string json_data = R"({"name": "John Doe","age": 30,"city": "New York","hobbies": ["reading", "gaming"]
})";void parse_and_modify_json()
{// 1.解析JSON字符串Json::Value root;Json::CharReaderBuilder builder;std::unique_ptr<Json::CharReader> reader(builder.newCharReader());JSONCPP_STRING err;bool parsingSuccessful = reader->parse(json_data.c_str(), json_data.c_str() + json_data.size(), &root, &err);if (!parsingSuccessful){std::cout << "Failed to parse JSON: " << std::endl;return;}// 2.改: 修改JSON数据root["name"] = "Jane Doe";          // 修改名字root["age"] = 31;                   // 修改年龄root["hobbies"][0] = "programming"; // 替换第一个爱好// 添加新的键值对root["job"] = "Software Engineer";// 3.查std::string name = root["name"].asString();int age = root["age"].asInt();std::cout << "Name: " << name << std::endl;std::cout << "Age: " << age << std::endl;// 4.转为stringbool shouldUseOldWay = false;   //使用旧版本的APIif (shouldUseOldWay){Json::FastWriter writer;const std::string json_file = writer.write(root);std::cout <<"old way ---\n"<< json_file << std::endl;}else{Json::StreamWriterBuilder builder;const std::string json_file = Json::writeString(builder, root);std::cout <<"new way ---\n"<< json_file << std::endl;}// 5.写入文件std::ofstream outfile("output.json");if (outfile.is_open()){Json::StreamWriterBuilder builder;builder["commentStyle"] = "None";builder["indentation"] = "   "; // 增加缩进std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());writer->write(root, &outfile);}outfile.close();
}int main(void)
{parse_and_modify_json();return 0;
}

2.scons构建

SConstruct

## 模板1
import os
env = Environment()env["PROGSUFFIX"] = ".out"            # 可执行后缀.out
env["CCFLAGS"] = " -g3 -O0 -Wall"  # gdb 调试开关env.MergeFlags(["!pkg-config --cflags --libs jsoncpp",]
)
src_list = ["1_jsonCpp_解析字符串_增.删.改.查.保存.cc",
]
for src in src_list:env.Program(Split(src))

scons

scons: Reading SConscript files …
scons: done reading SConscript files.
scons: Building targets …
g++ -o 1_jsonCpp_解析字符串_增.删.改.查.保存.o -c -g3 -O0 -Wall -I/usr/include/jsoncpp 1_jsonCpp_解析字符串_增.删.改.查.保存.cc
g++ -o 1_jsonCpp_解析字符串_增.删.改.查.保存.out 1_jsonCpp_解析字符串_增.删.改.查.保存.o -ljsoncpp
scons: done building targets.

3.运行

./1_jsonCpp_解析字符串_增.删.改.查.保存.out

Name: Jane Doe
Age: 31
new way —
{
“age” : 31,
“city” : “New York”,
“hobbies” :
[
“programming”,
“gaming”
],
“job” : “Software Engineer”,
“name” : “Jane Doe”
}

建议使用gdb调试运行,查看代码流程.

3.其它实例

jsoncpp 在线代码

2_jsonCpp_从文件读取.cc

可以git clone https://gitee.com/zero2200/3_cpp-practice.git,
vscode 打开代码, F5 gdb调试运行


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

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

相关文章

IContentService

目录 1、 IContentService 1.1、 // * 保存文章 1.2、 * 发布文章 1.3、 *查询文章返回多条数据 1.4、 * 根据id或slug获取文章 1.5、 * 查询分类/标签下的文章归档 2、 IRelationshipService

Gitea:轻量级、开源的Git仓库管理平台

引言 Gitea是一款开源的、基于Go语言编写的轻量级Git服务器。它提供了类似于GitHub的功能&#xff0c;如代码托管、版本控制、团队协作等&#xff0c;但更加轻便和易于部署。Gitea的设计初衷是为了让团队或个人能够更方便地管理和分享自己的代码&#xff0c;同时不需要花费大量…

MATLAB将多张小图整合到一张大图形成模板图

MATLAB将多张小图整合到一张大图形成模板图 代码如下: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;foldername字符模板; [datacell,filenamecell,filenameAllcell]readfun_1n(foldername); K2length(filenamecell);% …

常见射频指标的本质和意义(一)

1、Rx Sensitivity&#xff08;接收灵敏度&#xff09; 接收灵敏度&#xff0c;这应该是最基本的概念之一&#xff0c;表征的是接收机能够在不超过一定误码率的情况下识别的最低信号强度。这里说误码率&#xff0c;是沿用CS&#xff08;电路交换&#xff09;时代的定义作一个通…

【YOLO改进】主干插入SKAttention模块(基于MMYOLO)

SKAttention模块 论文链接:https://arxiv.org/pdf/1903.06586.pdf 将SKAttention模块添加到MMYOLO中 将开源代码SK.py文件复制到mmyolo/models/plugins目录下 导入MMYOLO用于注册模块的包: from mmyolo.registry import MODELS 确保 class SKAttention中的输入维度为in_cha…

读天才与算法:人脑与AI的数学思维笔记08_生物的创造力

1. 生物的创造力 1.1. 在进化树中是否有其他的物种已经具有与我们人类相当的创造力水平 1.2. 20世纪50年代中期&#xff0c;动物学家德斯蒙德莫里斯&#xff08;Desmond Morris&#xff09;在伦敦动物园做了这样一个试验 1.2.1. 动物学家给…

Laravel 6 - 第十四章 响应

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

《ESP8266通信指南》4-以Client进行TCP通信(AT指令)

往期 《ESP8266通信指南》3-常用AT指令详解-8266连WIFI-CSDN博客 《ESP8266通信指南》2-ESP8266 AT测试-CSDN博客 《ESP8266通信指南》1-ESP8266 简介-CSDN博客 1. 小节目标 通过 AT 指令使用 8266 进行 TCP 通信 2. 书接上回 复习以下&#xff0c;上一小节我们讲到了 8…

学习java第五十天

Spring框架中的Bean的生命周期是什么&#xff1f; 在Spring中&#xff0c;Bean的生命周期可以被划分为以下阶段&#xff1a; 实例化&#xff1a;在这个阶段中&#xff0c;Spring容器根据Bean的定义&#xff0c;通过反射或其他方法来创建Bean的实例。这个阶段包括调用构造方法和…

【MongoDB】--MongoDB的组合索引

目录 一、前言二、Query查询条件转换shell输入命令1、常用shell输入命令2、explain()解析计划三、组合索引的说明一、前言 本文章主要介绍Mongodb的组合索引的使用。 二、Query查询条件转换shell输入命令 1、常用shell输入命令 Query: {"tenantsid": {"$num…

hyperf 三十一 极简DB组件

一 安装及配置 composer require hyperf/db php bin/hyperf.php vendor:publish hyperf/db 默认配置 config/autoload/db.php 如下&#xff0c;数据库支持多库配置&#xff0c;默认为 default。 配置项类型默认值备注driverstring无数据库引擎 支持 pdo 和 mysqlhoststringl…

算法(哈希表

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 输入&#…

如何搭建邮箱服务器?mail系统架设的两种方法

邮件mail通信是常用的办公场景&#xff0c;对于技术和网管等人员&#xff0c;往往需要搭建自己的邮箱服务器。那么&#xff0c;如何架设邮箱系统呢&#xff1f;通常有两种方案&#xff0c;一种是在在本地主机部署&#xff0c;另一种是在云端如云服务器上部署应用。根据主机IP情…

立即刷新导致请求的response没有来得及加载造成的this request has no response data available

1、前端递归调用后端接口 const startProgress () > {timer.value setInterval(() > {if (progress.value < 100) {time.value--;progress.value Math.ceil(100 / wait_time.value);} else {clearInterval(timer.value);progress.value 0;timer.value null;time.…

暴力数据结构之单链表专题

1. 单链表的初始化 首先定义节点的结构&#xff0c;然后动态内存申请一部分空间&#xff0c;每一个节点都有一个值以及指向下一个节点的指针&#xff0c;称作值域和指针域。 //定义节点的结构 //数据 指向下一个节点的指针typedef int SLTDataType;typedef struct SListNode…

40. UE5 RPG给火球术增加特效和音效

前面&#xff0c;我们将火球的转向和人物的转向问题解决了&#xff0c;火球术可以按照我们的想法朝向目标发射。现在&#xff0c;我们解决接下来的问题&#xff0c;在角色释放火球术时&#xff0c;会产生释放音效&#xff0c;火球也会产生对应的音效&#xff0c;在火球击中目标…

【深度学习】DDoS-Detection-Challenge aitrans2024 入侵检测,基于机器学习(深度学习)判断网络入侵

当了次教练&#xff0c;做了个比赛的Stage1&#xff0c;https://github.com/AItransCompetition/DDoS-Detection-Challenge&#xff0c;得了100分。 一些记录&#xff1a; 1、提交的flowid不能重复&#xff0c;提交的是非入侵的数量和数据flowid,看check.cpp可知。 2、Stage…

大数据入门——概念、工具等

目录 一、基本概念 1.大数据技术 2.大数据特点 3.常见概念 4.数据分析师、数据开发工程师 二、相关工具 三、应用场景 四、大数据业务流程及组织结构 一、基本概念 1.大数据技术 主要解决海量数据的采集、存储和分析计算问题 2.大数据特点 大量、高速、多样、价值、…

【六十】【算法分析与设计】用一道题目解决dfs深度优先遍历,dfs中节点信息,dfs递归函数模板进入前维护出去前回溯,唯一解的剪枝飞升返回值true

路径之谜 题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是nn个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着音走,也不能跳跃。每走到一个新方格,就要向正北 方和正西…

ESP32开发

目录 1、简介 1.1 种类 1.2 特点 1.3 管脚功能 1.4 接线方式 1.5 工作模式 2、基础AT指令介绍 2.1 AT指令类型 2.2 基础指令及其描述 2.3 使用AT指令需要注意的事 3、AT指令分类和提示信息 3.1 选择是否保存到Flash的区别 3.2 提示信息 3.3 其他会保存到Flash的A…