【C++】Json库介绍和使用

C++利用jwt-cpp和httplib实现登录和列表 注意:如果连接github网站网速不行的话,有可能会失败,多试几次总会成功的,注意安装顺序,jwt-cpp的安装需要依赖前面两个库。如题,其实c#可能更适合来做个项目,但是俺只会c++,无奈,找了好多帖子都不能简单的把这个服务器搭出来,所以自己上了。---准备工作完成---(如果上述过程中遇到问题,可以随时使用智谱清言问,这个ai比较靠谱(ps:这句话没有收费))首先你的电脑需要安装vcpkg,不知道为什么VS自带的vcpkg就是无法安装库,所以还得自己下一个。打开VS,创建控制台项目,随便起个项目名吧。 阅读详情

JsonCpp库

Json数据格式

Json 是一种数据交换格式,它采用完全独立于编程语言的文本格式来存储和表示数据。

例如:我们想表示一个同学的学生信息

C代码表示

char *name = "xx";
int age = 18;
float score[3] = {88.5,99,58];

Json表示

{
    "姓名" : "xx",
    "年龄" : 18,
    "成绩" : {88.5,99,58},
    "爱好" : {
        "书籍" : "西游记",
        "运动" : "打游戏"
    }
}

Json 的数据类型包括对象,数组,字符串,数字等

  • 对象:使用花括号 { } 括起来的表示一个对象
  • 数组:使用中括号 [ ] 亏括起来的表示一个数组
  • 字符串:使用常规双引号  " " 括起来的表示一个字符串
  • 数字:包括整形和浮点型,直接使用

Jsoncpp介绍

Jsoncpp 库主要是用于实现 Json 格式数据的序列化和反序列化,它实现了将多个数据对象组织成为 Json 格式字符串,以及将 Json 格式字符串解析多个数据对象的功能

先看一下 Json 对象类的表示

class Json::Value {
    Value &operator=(const Value &other); // Value重载了[]和=,因此所有的赋值和获取数据都可以通过
    Value& operator[](const std::string& key); // 简单的方式完成 val["name"] = "xx";
    Value& operator[](const char* key);
    Value removeMember(const char* key); // 移除元素
    const Value& operator[](ArrayIndex index) const; // val["score"][0]
    Value& append(const Value& value); // 添加数组元素 val["score"].append(88);
    ArrayIndex size() const; // 获取数组元素个数 val["score"].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 float weight = val["weight"].asFloat();
    bool asBool() const; // 转 bool bool ok = val["ok"].asBool();
};

Jsoncpp 主要借助三个类以及对应的少量成员函数完成序列化和反序列化

1.序列化接口

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

2.反序列化接口

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

Jsoncpp 使用

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

// 实现数据的序列化
bool serialize(const Json::Value &val, std::string &body)
{
    
    std::stringstream ss;
    // 先实例化一个工厂类对象
    Json::StreamWriterBuilder swb;

    swb["emitUTF8"] = true; 

    // 通过工厂类对象来生产派生类对象
    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
    int ret = sw->write(val, &ss);

    if(ret != 0){
        std::cout << "Json serialize failed!\n";
        return false;
    }

    // std::cout << std::endl;
    body = ss.str();
    return true;
}

// 实现json字符串的反序列化
bool unserialize(const std::string &body, Json::Value &val)
{
    // 实例化工厂类对象
    Json::CharReaderBuilder crb;
    // 生产CharReader对象
    std::string errs;
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    bool ret = cr->parse(body.c_str(), body.c_str() + body.size(), &val, &errs);
    if(ret == false){
        std::cout << "json unserialize failed : " << errs <<std::endl;
        return false;
    }
    return true;
}

int main()
{

    const char *name = "小明";
    int age = 18;
    const char *sex = "男";
    float score[3] = {88, 77.5, 66};

    Json::Value student;
    student["姓名"] = name;
    student["年龄"] = age;
    student["性别"] = sex;
    student["成绩"].append(score[0]);
    student["成绩"].append(score[1]);
    student["成绩"].append(score[2]);

    Json::Value fav;
    fav["书籍"] = "西游记";
    fav["运动"] = "打篮球";
    student["爱好"] = fav;
    std::string body;
    serialize(student, body);
    std::cout << body << std::endl;

    std::string str = R"({"姓名":"小黑", "年龄":19, "成绩":[32, 45, 56]})";
    Json::Value stu;
    bool ret = unserialize(str,stu);
    if(ret == false) return -1;
    std::cout << "姓名: " << stu["姓名"].asString() << std::endl;
    std::cout << "年龄: " << stu["年龄"].asInt() << std::endl; 
    int sz = stu["成绩"].size();
    for(int i = 0;i < sz; i++){
        std::cout << "成绩: " << stu["成绩"][i].asFloat() << std::endl;
    }

    return 0;
}

在VSCODE中使用C++图形界面库SFML 最近在写一个Halma Chess的课程作业,因为想为简陋的C++控制台程序简单的配置一个UI,所以选择了SFML。 SFML为PC的各种组件提供了一个简单的界面,可以简化游戏和多媒体应用程序的开发。所以用来做小游戏的demo非常便利~ SFML下载传送门:https://www.sfml-dev.org/download.php SFML官方配置及使用指南:https://www.sfm... 阅读详情

相关推荐

YAML解析库:yaml-cpp

本文将简单介绍yaml-cpp库的安装以及简单使用

hellmorning的博客 2349

C++中使用Json

1. Json简介 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。Json的格式更加简单,同样的内容,用Json来表示比用XML表示时字符少的多,没有一大堆的标记及尖括号,决定了Json更加容易手写。同样的,字符少,信息量大,所以我认为也更加易读。 Json有多流行?Json官网看看有多少语言的解析库

Micheal Yang 8856

AISHELL-1中文语音数据集实战:从下载到训练你的第一个ASR模型(附完整代码)

本文详细介绍了如何使用AISHELL-1中文语音数据集从数据准备到训练端到端语音识别模型的全流程。AISHELL-1作为国内首个开源的普通话语音数据集,包含178小时高质量录音,适合中文自动语音识别(ASR)系统开发。文章涵盖数据下载、预处理、Conformer-CTC模型训练、评估及优化策略,并附完整代码实现。

garlic的博客 1119

【C++开发中使用JSON的妙用】

使用JSON参数在C++中进行配置管理、序列化、数据交换、动态配置等操作非常方便,尤其是在现代软件开发中具有重要的意义。nlohmann/json库是一个非常好用的JSON库,易于使用且功能丰富。根据项目需求,还可以选择其他性能更优的库,如RapidJSON。通过JSON文件,程序的可维护性、可扩展性和灵活性得到了显著提升。

GOLDMINDER的博客 1476

SAP MM新手避坑指南:工厂间调拨用301还是303?手把手教你选对移动类型

本文深入解析SAP MM模块中工厂间调拨的301与303移动类型,帮助新手避开常见陷阱。通过对比一步法(301)和两步法(303+305)的核心差异、适用场景及财务影响,提供清晰的决策框架和实战技巧,确保库存调拨的准确性和效率。

weixin_29223603的博客 346

Java写一条吃满屏幕的贪吃蛇(A*自动寻路算法和一些简单的策略) 二

上一篇文章介绍了一条贪吃蛇的简单实现,这一篇介绍贪吃蛇的自动寻路算法 ,说是自动寻路其实也就是一种遍历地图的算法,如果玩过游戏肯定知道游戏里面一般会有自动寻路功能,贪吃蛇的自动寻路算法也就是实现这个功能。下面慢慢介绍这种算法吧。    最开始,我没有在网上找资料的时候,我对于设计寻路算法的看法是遍历整个地图,将障碍物做上标记,然后找一条能够到达目的地的线路就可以了。所以最开始我用了特别暴力的方式来...

Sober_yang的博客 3632

C++ JSON库的一般使用方法

C++ JSON库的一般使用方法。文中尝试了:Boost json、Qt json、nlohmann json,这三种json库。

大草的博客 4255

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

C++的JSON库及使用方法

VC没有自带的JSON库,所以分享一下如何使用该库http://download.youkuaiyun.com/detail/moruite/4104704 1. json.h头文件包含了如下API #ifndef CPPTL_JSON_H_INCLUDED # define CPPTL_JSON_H_INCLUDED # include "forwards.h" # include <stri...

zjh20052318的专栏 3098

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 49

【第三方互联】3、腾讯QQ授权第三方登录

当我们创建的 QQ 互联应用成功后,我们便可以开始使用该应用来实现 QQ 互联 一、获取 APP ID 和 APP Key 1、找到我的应用 2、点击应用,进入详情 这样,我们就获取到了 APP ID 和 APP Key 二、进行开发 1、将 APP ID 、APP Key,以及该应用的信息放入项目中的配置文件中,我使用的是SpringBoot,我放在了 application.y...

JACKAL 22万+

C++中配置json以及使用

jsoncpp的配置和使用

neuzhangno的博客 3102

Horn-Schunck光流算法的Python实现

光流是计算机视觉领域中的一个重要概念,它描述了图像中物体在时间上的运动。Horn-Schunck光流算法是一种经典的光流估计方法,通过对图像的亮度变化进行建模,来估计像素的运动速度。在本文中,我们将使用Python实现Horn-Schunck光流算法,并提供相应的源代码。请注意,该算法假设图像上的亮度变化主要由物体的运动引起,并且假设光流在整个图像上是稠密的。在上面的示例中,我们首先读取了两个输入图像,然后使用我们实现的Horn-Schunck光流算法估计了它们之间的光流。首先,我们需要导入一些必要的库。

持续更新 495

C++中使用cpp-httplib和nlohmann_json库实现http请求获取天气数据

本文介绍了如何在C++中使用cpp-httplib和nlohmann_json库实现HTTP请求获取天气数据。cpp-httplib是一个轻量级的HTTP/HTTPS客户端/服务端库,而nlohmann_json是流行的JSON解析库。文章展示了如何通过这两个库向api.open-meteo.com发送请求获取天气预报数据,并解析返回的JSON格式响应,提取当前温度信息。示例代码演示了同步和异步两种请求方式,最终输出包含温度值和单位的天气信息。这种方法为C++开发者提供了简单高效的HTTP通信解决方案。

ccf19881030的专栏 1042

使用 YOLO26 的牙科全景X光片分析:从牙齿检测到疾病诊断

从数据预处理自动化、模型架构针对性优化到基于视觉特征的性能分析。它证明了在医学图像分析中,模型架构的进步(如YOLO26的特性)可以有效缓解数据不平衡和目标微小的问题,为临床自动化诊断提供了一个高效、可靠的解决方案。Python"""全局配置模块包含数据集路径、类别名称、论文复现参数、划分比例等常量"""import os# ==================== 路径配置 ====================

u012133341的博客 102

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c++雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程)

雅兰亭库,名字很优雅,也很强大。它是阿里开源的一个现代C++基础工具库的集合, 现在包括 struct_pack, struct_json, struct_xml, struct_yaml, struct_pb, easylog, coro_rpc, coro_io, coro_http 和 async_simple等功能, 也一直在持续优化并添加更多的新功能。yaLanTingLibs 的目标::为C++开发者提供高性能,极度易用的现代C++基础工具库, 帮助用户构建高性能的现代C++应用。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 4027

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Eigen库安装(VS Code + Cpp环境)

​Eigen是一个高效的C++ 数值计算库,主要用于线性代数、矩阵运算、向量运算、数值解法、特征值计算、矩阵分解等数值计算任务,加快C++的算法实现,避免重复造轮子的过程。

yzlove3000的博客 1752

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

c++雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程

它是阿里开源的一个现代C++基础工具库的集合, 现在包括 struct_pack, struct_json, struct_xml, struct_yaml, struct_pb, easylog, coro_rpc, coro_io, coro_http 和 async_simple等功能, 也一直在持续优化并添加更多的新功能。yaLanTingLibs 的目标::为C++开发者提供高性能,极度易用的现代C++基础工具库, 帮助用户构建高性能的现代C++应用。雅兰亭库(yalantinglibs)介绍。

sun007700的专栏 587

vscode编写c++文件——添加自定义库(ubuntu20.04)

ubuntu20.04下用vscode编写c++文件——添加自定义库

weixin_43387635的博客 4415

使用cpp-httplib和nlohmann/json做一个能传文件的服务器和客户端

最近项目中要搭建自己的响应服务器,C++技术,能跟客户端通讯做一些功能,比如上传下载文件(文本的和二进制的,比如配置文件和应用程序的升级),比如用户登录、添加、修改等操作。 自己写规约做了一个,发现很麻烦,用二进制的方法,发送端、接收端的封包操作十分繁琐。 周末找到了cpp-httplib,又同时发现了nlohmann/json,发现用这两个库结合起来,就能用C++做一个类似Apache+PHP的网站服务器了! 代码编写十分简单,我这里举例的是根据库里的例子修改的,客户端是根据文档编写的,测试通过的。 需要

canlynetsky的博客 5672

C++ JSON流解析和字符串解析学习

C++ JSON流解析和字符串解析学习

GG‘s Blog 1172

告别复杂数据解析:cpp-httplib让JSON/XML处理如此简单

在C++网络开发中,处理JSON和XML数据往往让开发者头疼不已。繁琐的解析代码、复杂的第三方库集成、跨平台兼容性问题,这些痛点是否也困扰着你?本文将带你探索如何使用cpp-httplib这个轻量级HTTP库,轻松实现JSON和XML数据的发送与接收,让数据格式处理不再成为项目瓶颈。 ## 认识cpp-httplib:一个文件解决HTTP需求 cpp-httplib是一个C++头文件-only...

gitblog_00907的博客 456

json C++ 待完善

目录 3、c++ rapidjson 处理json方法: rapidjson 的使用--简单的字典形式 编码:转换成字符结构 编码复杂的字典结构--字典中带有字典和列表 解码 json的官网:包含所有语言 http://json.org/ 3、c++ rapidjson 处理json方法: 和python不一样:python自带的内置模块很好的处理...

weixin_42053726的博客 295

【亲测免费】 jwt-cpp 项目使用教程

jwt-cpp 是一个用于创建和验证 JSON Web Tokens (JWT) 的 C++ 库。以下是该项目的目录结构及其介绍: ``` jwt-cpp/ ├── include/ │ └── jwt-cpp/ │ ├── base.h │ ├── claims.h │ ├── jwt.h │ ├── picojson.h │ └

gitblog_01120的博客 913

如何在C++项目中快速集成Sonic-Cpp?超详细安装与配置指南

想要在C++项目中实现极速JSON序列化和反序列化吗?Sonic-Cpp正是您需要的解决方案!作为一款基于SIMD指令集加速的高性能JSON处理库,Sonic-Cpp能够显著提升您的应用程序JSON处理性能。本文将为您提供完整的Sonic-Cpp集成指南,帮助您快速掌握这款强大的C++ JSON库。 ## 📦 Sonic-Cpp是什么? Sonic-Cpp是字节跳动开源的一款高性能JSON序

gitblog_00443的博客 1013

jwt-cpp 开源项目教程

jwt-cpp 是一个用于创建和验证 JSON Web Tokens (JWT) 的 C++ 库。它是一个头文件库,支持多种签名算法,如 HMAC、RSA、ECDSA 等。该库的设计目标是提供一个简单易用、模块化的解决方案,以便于在 C++ 项目中集成和使用 JWT。 ## 项目快速启动 ### 安装依赖 在使用 jwt-cpp 之前,需要确保系统中安装了以下依赖: - libcrypto

gitblog_01170的博客 853
上一篇: 【C++】JRpc手撕框架 环境搭建
下一篇: 【C++】 网络编程实战:带你用 muduo 搭建一个高性能 TCP 服务
e直在momo想你的Frank
博客等级 码龄2年 120粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值