首页 前端知识 C 项目——集群聊天服务器项目(二)Json第三方库

C 项目——集群聊天服务器项目(二)Json第三方库

2024-04-29 12:04:43 前端知识 前端哥 241 694 我要收藏

今天继续来更新C++集群聊天服务器项目,如果还有未搭建环境的小伙伴可以移步我的上一篇博客,指路C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置-CSDN博客

这里包含项目所需的必要环境。

今天介绍Json第三方库的使用,主要是实现服务端与客户端间通信数据的序列化与反序列化,一起来看看吧~课程资源可以看【高级】C++项目-集群聊天服务器-软件分层设计和高性能服务开发_吾爱学堂 (yuerxuetang.com)

一、Json介绍

在网络中,常用的数据传输序列化格式有XML,Json,ProtoBuf

在公司级别的项目中=大量的在使用 ProtoBuf作为数据序列化的方式,但是使用起来比Json稍复杂一些

数据的序列化方式可选择:Json、XML、Protobuf

Json是一种轻量级的数据交换格式(也叫数据序列化方式)。

Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。

易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

二、第三方库Json.hpp

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。

特点:

(1)直观的语法

(2)整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便

(3)使用 C++ 11 标准编写

(4)使用 json 像使用 STL 容器一样

(5)STL 和 json 容器之间可以相互转换

(6)严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此 外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII) 的最佳实践

使用方法:

#include "json.hpp"
using json = nlohmann::json;

三、Json序列化实例

3.1 序列化实例1

string func1(){
    json js;
    js["Msg_Type"]=2;
    js["From"]="Zhang San";
    js["To"]="Li Si";
    js["Message"]="Hey, BaBy!";

    string sendBuf = js.dump();     //转成字符串通过网络发送
    return sendBuf;
}

输出结果:

3.2 序列化实例2

string func2(){
    json js;
    //添加数组
    js["id"]={1,2,3,4,5};
    //添加键值对
    js["name"]="Zhang San";
    //添加对象
    js["msg"]={{"Zhang san","Hello World!"},{"Li Si","Hello China!"}};
    return js.dump();
}

 输出结果:

3.3 序列化实例3

string func3(){
    json js;
    //序列化一个vector容器
    vector<int>v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(5);
    js["list"]=v;

    //序列化一个map容器
    map<int,string>m;
    m.insert(make_pair(1,"黄山"));
    m.insert(make_pair(2,"华山"));
    m.insert(make_pair(3,"嵩山"));
    js["path"]=m;

    string SendBuf = js.dump();     //json数据对象->序列化 json字符串
    return SendBuf;  
}

输出结果:

四、Json反序列化实例

4.1 反序列化实例1

    string recBuf = func1();
    json jsbuf=json::parse(recBuf);      //数据的反序列化    json字符串->json对象
    cout << jsbuf["Msg_Type"] << endl;
    cout << jsbuf["From"] << endl;
    cout << jsbuf["To"] << endl;
    cout << jsbuf["Message"] << endl;   

输出:

4.2 反序列化实例2

    string recBuf = func2();
    json jsbuf=json::parse(recBuf);      //数据的反序列化    json字符串->json对象
    auto arr=jsbuf["id"];
    cout << arr[2] << endl;

    auto jsmsg=jsbuf["msg"];
    cout << jsmsg["Zhang san"] << endl;
    cout << jsmsg["Li Si"] << endl;

输出:

4.3 反序列化实例3

    string recBuf = func3();
    json jsbuf=json::parse(recBuf);      //数据的反序列化    json字符串->json对象
    vector<int> vec = jsbuf ["list"];
    for(int &v:vec){
        cout << v << " ";
    }
    cout << endl;
    map<int,string> mymap=jsbuf["path"];
    for(auto &p:mymap){
        cout << p.first << " " << p.second << endl;
    }

输出结果:

Json学习结束,如果有问题还请及时联系我~

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6597.html
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!